当前位置:首页 > CMS教程 > 其它CMS > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2022-03-09 08:51:21 浏览: 评论:0 

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

  1. // status 422 
  2.  "message":"The given data was invalid."
  3.  "errors":{ 
  4.   "url":[ 
  5.    "url 无效的格式" 
  6.   ] 
  7.  } 

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

  1. protected function convertValidationExceptionToResponse(ValidationException $e$request
  2.  if ($e->response) { 
  3.   return $e->response; 
  4.  } 
  5.  
  6.  return $request->expectsJson() 
  7.     ? $this->invalidJson($request$e
  8.     : $this->invalid($request$e); 

expectsJson()区分是 ajax 请求还是表单请求,然后分别做处理。

  1. protected function invalidJson($request, ValidationException $exception
  2.  return response()->json([ 
  3.   'message' => $exception->getMessage(), 
  4.   'errors' => $exception->errors(), 
  5.  ], $exception->status); 

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

  1. protected function invalidJson($request, ValidationException $exception
  2.  return response()->json([ 
  3.   'code' => 0, 
  4.   'data' => $exception->errors(), 
  5.  ], $exception->status); 

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

  1. // status 422 
  2.  "code": 0, 
  3.  "data":{ 
  4.   "url":[ 
  5.    "url 无效的格式" 
  6.   ] 
  7.  } 
  8. }

Tags: Laravel验证异常响应格式

分享到: