Laravel 解决 validate 验证 Ajax 表单请求验证失败报 422 错误
欢迎使用社区 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 协议》,转载必须注明作者和本文链接