Laravel 5.5 FormRequest 自定义错误消息

Laravel 5.5 FormRequest 自定义错误消息

  使用FormRequest进行表单验证,就不用让验证逻辑和控制器里面的逻辑都混在一起。但在使用的时候呢,发现json错误返回的数据,与我们想要的有点差距。下面我给个例子:(不喜勿喷) 
  这里写图片描述

  在用ajax进行提交时,如果验证错了,那么他会返回 
  这里写图片描述 
   
  如果是权限错了,他会返回 
  这里写图片描述

  但我想要的是 
  这里写图片描述

  那怎么办呢,其实很简单 
  我们只需要在 App\Exceptions\Handler 里面重写两个函数就可以了 
  这里写图片描述
  添加上这两个函数,然后里面怎么定义,就看你了 
  记得加上 
  

       use Illuminate\Validation\ValidationException;
       use Illuminate\Auth\Access\AuthorizationException;
  • 1
  • 2

最后附上这两个文件的代码 
LoginPost

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Auth\AuthenticationException;

class LoginPost extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize(){
        if($this->input('account')=='[email protected]'){
            return false;
        }
        return true;
    }

    protected function failedAuthorization()
    {
        throw new AuthenticationException('该帐号已被拉黑');
    }



    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules(){
        return [
            'account'=>[
                'required',
                'regex:/^1[34578][0-9]\d{4,8}|(\w)+(\.\w+)*@(\w)+((\.\w+)+)|[0-9a-zA-Z_]+$/',//验证为手机号,邮箱,或帐号
            ],
            'password'=>'required|between:6,18',//验证密码
        ];
    }

    public function messages(){
        return [
            'account.required' => '帐号不能为空',
            'account.regex' => '帐号不合法',
            'password.required'  => '密码不能为空',
            'password.between'  => '密码错误',
        ];
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54

Handler

<?php

namespace App\Exceptions;

use Exception;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
use Illuminate\Validation\ValidationException;
use Illuminate\Auth\AuthenticationException;

class Handler extends ExceptionHandler
{
    /**
     * A list of the exception types that are not reported.
     *
     * @var array
     */
    protected $dontReport = [
        //
    ];

    /**
     * A list of the inputs that are never flashed for validation exceptions.
     *
     * @var array
     */
    protected $dontFlash = [
        'password',
        'password_confirmation',
    ];

    /**
     * Report or log an exception.
     *
     * This is a great spot to send exceptions to Sentry, Bugsnag, etc.
     *
     * @param  \Exception  $exception
     * @return void
     */
    public function report(Exception $exception)
    {
        parent::report($exception);
    }

    /**
     * Render an exception into an HTTP response.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Exception  $exception
     * @return \Illuminate\Http\Response
     */
    public function render($request, Exception $exception)
    {
        return parent::render($request, $exception);
    }


    protected function unauthenticated($request, AuthenticationException $exception)
    {

        if($request->expectsJson()){
            $response=response()->json([
                    'status'=>3,
                    'msg' => $exception->getMessage(),
                    'errors'=>[],
                ], 200);
        }else{
            $response=redirect()->guest(route('login'));
        }
        return $response;
    }

    protected function invalidJson($request, ValidationException $exception)
    {
        return response()->json([
            'status'=>2,
            'msg' => $exception->getMessage(),
            'errors' => $exception->errors(),
        ], $exception->status);
    }
}

猜你喜欢

转载自blog.csdn.net/sunjinyan_1/article/details/81136857