formatErrors 在 Laravel 5.5 中不再起作用了吗?

Does formatErrors not working anymore in Laravel 5.5?

我的请求 class 中有以下代码 returns 自定义消息。

public function formatErrors(\Illuminate\Contracts\Validation\Validator $validator) {
    if($validator->fails()) {
        $validator->errors()->add('Message', "Validation failed");
    }
    return parent::formatErrors($validator);
}

它在 Laravel 5.4 中返回错误消息,但似乎此功能在 Laravel 5.5

中不再起作用

有人在 Laravel 5.5 遇到过这个问题吗?

Upgrade guide中您可以阅读:

In Laravel 5.5, all exceptions, including validation exceptions, are converted into HTTP responses by the exception handler. In addition, the default format for JSON validation errors has changed. The new format conforms to the following convention: ...

所以你应该做的是将以下方法添加到 app\Exceptions\Handler.php 文件:

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

显然,您可能希望更多地调整此方法,因为在以前的 Laravel 版本中,默认情况下是这样的:

return response()->json($exception->errors(), $exception->status);