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

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

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

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

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

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

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

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

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

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

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

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

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

Tags: Laravel验证异常响应格式

分享到: