Laravel 修改验证异常的响应格式实例代码详解

2020-11-02 11:44:04 浏览数 (1)

Laravel 默认验证不通过后响应格式如下,有时此格式并不满足自己要求,需要修改格式。

代码语言:javascript复制
// status 422
{
 "message":"The given data was invalid.",
 "errors":{
  "url":[
   "url 无效的格式"
  ]
 }
}

当 Request 验证失败时会抛出 ValidationException异常,最终交由全局异常Handler类处理。Handler继承自IlluminateFoundationExceptionsHandler,框架中的Handler类调用render处理异常并进行响应,针对于ValidationException异常又调用了convertValidationExceptionToResponse方法来处理。代码

代码语言:javascript复制
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 请求还是表单请求,然后分别做处理。

代码语言:javascript复制
protected function invalidJson($request, ValidationException $exception)
{
 return response()- json([
  'message' =  $exception- getMessage(),
  'errors' =  $exception- errors(),
 ], $exception- status);
}

追踪到invalidJson(),发现他就是用来处理参数验证异常响应格式的方法。在AppExceptionsHandler类中,重写invalidJson()方法即可。

代码语言:javascript复制
protected function invalidJson($request, ValidationException $exception)
{
 return response()- json([
  'code' =  0,
  'data' =  $exception- errors(),
 ], $exception- status);
}

最终,验证失败的响应格式如下

代码语言:javascript复制
// status 422
{
 "code": 0,
 "data":{
  "url":[
   "url 无效的格式"
  ]
 }
}

总结

到此这篇关于Laravel 修改验证异常的响应格式的代码详解的文章就介绍到这了,更多相关Laravel异常响应格式内容请搜索ZaLou.Cn以前的文章或继续浏览下面的相关文章希望大家以后多多支持ZaLou.Cn!

0 人点赞