Laravel 默认验证不通过后响应格式如下,有时此格式并不满足自己要求,需要修改格式。
// status 422 { "message":"The given data was invalid.", "errors":{ "url":[ "url 无效的格式" ] } }
当 Request 验证失败时会抛出 ValidationException
异常,最终交由全局异常Handler
类处理。Handler
继承自IlluminateFoundationExceptionsHandler
,框架中的Handler
类调用render
处理异常并进行响应,针对于ValidationException
异常又调用了convertValidationExceptionToResponse
方法来处理。代码
protected function convertValidationExceptionToResponse(ValidationException $e, $request) { if ($e->response) { return $e->response; } return $request->expectsJson() ? $this->invalidJson($request, $e) : $this->invalid($request, $e); }
expectsJson()
区分是 ajax 请求还是表单请求,然后分别做处理。
protected function invalidJson($request, ValidationException $exception) { return response()->json([ 'message' => $exception->getMessage(), 'errors' => $exception->errors(), ], $exception->status); }
追踪到invalidJson()
,发现他就是用来处理参数验证异常响应格式的方法。在AppExceptionsHandler
类中,重写invalidJson()
方法即可。
protected function invalidJson($request, ValidationException $exception) { return response()->json([ 'code' => 0, 'data' => $exception->errors(), ], $exception->status); }
最终,验证失败的响应格式如下
// status 422 { "code": 0, "data":{ "url":[ "url 无效的格式" ] } }