首页 > 解决方案 > 为什么 Laravel 验证总是返回默认消息?

问题描述

当我使用 AJAX 向服务器发送错误数据时,Laravel 会检查它并抛出消息错误:

The given data was invalid.

我的请求验证是:

class RegistrationRequest extends FormRequest
{

    public function authorize()
    {
        return true;
    }

    public function messages()
    {
        return [
            'email' => 'required|email|unique:users',
            'password' => 'required|min:6',
        ];
    }

    public function rules()
    {
        return [
            'email' => 'required|email|unique:users',
            'password' => 'required|min:6',
        ];
    }
}

使用的是:

public function register(RegistrationRequest $request){}

处理程序异常是:

 public function render($request, Exception $exception)
    {

        if ($exception instanceof ValidationException) {
            return response()->json(['type' => 'error', 
                'codes' => [$exception->getMessage()]], 400);
        }

        return parent::render($request, $exception);
    }

标签: laravellaravel-5

解决方案


That's what you told it to do in your exception handler when you overrode the default output to just display $exception->getMessage(). That's the message for a ValidationException.

The built-in exception handler already has handling for both AJAX requests that expect JSON results and ValidationExceptions. If you're going to override it, you'll want to mimic that functionality... but in most cases you should just leave it alone.

The important bit of the default handler is this:

return response()->json([
    'message' => $exception->getMessage(),
    'errors' => $exception->errors(),
], $exception->status);

推荐阅读