laravel 使用 request 类验证表单时,不返回具体字段错误信息和错误状态码422,只返回 500错误 The given data was invalid
这是 laravel 没有对 validateException 进行具体处理,而是直接抛出500错误和上面的信息,在后续的处理中使用 getmessage() 已经获取不到错误信息。这类信息只能通过一下方法获取
$e->validator->errors()->first(),
- 解决方法1
在 Exception/handler 的render()进行异常渲染,自定义返回的异常
if ($e instanceof ValidationException){
//request类验证异常时返回具体信息,而不是The given data was invalid 500异常
//这类异常信息用getMessage()获取不到
//dd($e->validator->errors()->first());
return response()->json([
'message' => $e->validator->errors()->first(),
'errors' => $e->validator->getMessageBag(),
'code' => 422,
'success' => false,
'exception' => get_class($e),
'file' => $e->getFile(),
'line' => $e->getLine(),
'trace' => collect($e->getTrace())->map(function ($trace) {
return Arr::except($trace, ['args']);})
], 422);
}
- 解决方法2
使用 dingo/api
项目引入 dingo/api 后,在 BaseFormRequest 类中继承 dingo 的 formRequest
//use Illuminate\Foundation\Http\FormRequest;
//改成 dingo 的 FormRequest
异常还是自己重新定义一下,方便调试
网友评论