解决 Ajax 表单请求验证失败报 422 错误
描述
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());
}
结果验证
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: