歡迎使用社群 Markdown 編輯器寫文章!
一. 描述
laravel 驗證類不同的請求方式,驗證錯誤返回的型別也不同
- Layui 的表單請求 validate 驗證失敗會重定向之前的頁面,錯誤資訊會快取並賦值到檢視中
- ajax 請求驗證失敗,會返回 422 錯誤 這個錯誤會導致返回地址為紅色
二. 解決問題思路
- 建立新的 Request 驗證類
- 修改Controller控制器方法的 Request 的方法
- 修改 validate 驗證返回程式碼 200
三. 操作方法
- 修改檔案:app->Http->Middleware->
VerifyCsrfToken.php
程式碼
:
// 在$except屬性中新增不要檢查的路由即可
protected $except = [
'/admin/del-sys-user',
'/admin/add-sys-user',
];
- Laravel提供了生成Form Request的Artisan命令:
程式碼
:
$ php artisan make:request StoreCommentRequest
- 修改檔案:
StoreCommentRequest.php
新增變數$rules
程式碼
:
//驗證規則可自己新增需要驗證的欄位
protected $rules = [
'username' => 'required|alpha_num|regex:/^(?!([A-Za-z]+|d\d+)$)[A-Za-z\d]$/',
'password' => 'required|min:8',
'level' => 'required|numeric|between:1,4',
'bili' => 'required|numeric|between:1,99'
];
- 修改檔案:
StoreCommentRequest.php
的authorize
方法返回true
程式碼
:
public function authorize()
{
return true;
}
public function rules()
{
$rules = $this->rules;
return $rules;
}
// 重寫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());
}
- 修改UsersController控制器方法 \App\Http\Requests\StoreCommentRequest $request
程式碼
:
public function store(\App\Http\Requests\StoreCommentRequest $request)
{
...............
資訊來源:
- https://www.jianshu.com/p/0225e63454e8
- https://www.jianshu.com/p/658f979abfb7
- 部落格:解決 Ajax 表單請求驗證失敗報 422 錯誤
本作品採用《CC 協議》,轉載必須註明作者和本文連結