歡迎您光臨本站 註冊首頁

Laravel 修改驗證異常的響應格式例項程式碼詳解

←手機掃碼閱讀     ljg58026 @ 2020-06-12 , reply:0

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 無效的格式"    ]   }  }

 


[ljg58026 ] Laravel 修改驗證異常的響應格式例項程式碼詳解已經有257次圍觀

http://coctec.com/docs/php/show-post-238193.html