Laravel 解决 validate 验证 Ajax 表单请求验证失败报 422 错误

欢迎使用社区 Markdown 编辑器写文章!

一. 描述

laravel 验证类不同的请求方式,验证错误返回的类型也不同

  • Layui 的表单请求 validate 验证失败会重定向之前的页面,错误信息会缓存并赋值到视图中
  • ajax 请求验证失败,会返回 422 错误 这个错误会导致返回地址为红色

二. 解决问题思路

  • 创建新的 Request 验证类
  • 修改Controller控制器方法的 Request 的方法
  • 修改 validate 验证返回代码 200

三. 操作方法

  1. 修改文件:app->Http->Middleware->VerifyCsrfToken.php

代码

// 在$except属性中添加不要检查的路由即可
protected $except = [
    '/admin/del-sys-user',
    '/admin/add-sys-user',
];
  1. Laravel提供了生成Form Request的Artisan命令:

代码

$ php artisan make:request StoreCommentRequest
  1. 修改文件: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'
    ];
  1. 修改文件:StoreCommentRequest.phpauthorize 方法返回 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());
    }
  1. 修改UsersController控制器方法 \App\Http\Requests\StoreCommentRequest $request

代码

    public function store(\App\Http\Requests\StoreCommentRequest $request)
    {
             ...............

信息来源:

  1. https://www.jianshu.com/p/0225e63454e8
  2. https://www.jianshu.com/p/658f979abfb7
  3. 博客:解决 Ajax 表单请求验证失败报 422 错误
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!