描述
laravel驗證類不同的請求方式,驗證錯誤返回的型別也不同
- 普通表單請求驗證失敗會重定向之前的頁面,錯誤資訊會快取並賦值到檢視中
- ajax請求驗證失敗,會返回422錯誤
解決問題
解決ajax請求的422報錯資訊,自定義返回資料型別
前提條件
猶豫laravel的csrf驗證機制,為了測試,先去掉ajax請求時這個驗證機制
修改檔案:app->Http->Middleware->VerifyCsrfToken.php
// 在$except屬性中新增不要檢查的路由即可
protected $except = [
'/admin/del-sys-user',
'/admin/add-sys-user',
];
自定義驗證錯誤返回型別
修改檔案:在你寫的驗證類中,即app->Http->Requests->FormPost.php
實現原理:重寫驗證錯誤的響應處理
實現方法:
use Illuminate\Contracts\Validation\Validator;
use Illuminate\Validation\ValidationException;
use Symfony\Component\HttpFoundation\Response;
// 重寫ajax請求驗證錯誤響應格式(防止驗證422報錯)
protected function failedValidation(Validator $validator)
{
// 此處自定義您想要返回的資料型別
$data = [
'code' => 400,
'msg' => $validator->errors()->first(),
];
$respone = new Response(json_encode($data));
throw (new ValidationException($validator, $respone))
->errorBag($this->errorBag)
->redirectTo($this->getRedirectUrl());
}