You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 5.5表单请求验证失败后如何排除指定字段闪存?

解决Laravel 5.5表单请求排除特定字段闪存的问题

兄弟,我之前在Laravel 5.5升级的时候也踩过这个坑,给你整理几个亲测有效的解决办法:

  • 正确重写表单请求的failedValidation方法
    你说重写这个方法报错,大概率是写法不对。正确的姿势是在你的表单请求类里这么写:

    use Illuminate\Contracts\Validation\Validator;
    use Illuminate\Http\Exceptions\HttpResponseException;
    
    protected function failedValidation(Validator $validator)
    {
        // 定义需要排除闪存的字段
        $excludeFields = ['password', 'password_confirmation'];
    
        throw new HttpResponseException(
            redirect()->back()
                ->withErrors($validator)
                // 只闪存排除后的输入字段
                ->withInput($this->except($excludeFields))
        );
    }
    

    这里通过except()方法直接过滤掉不想闪存的敏感字段,比如密码类信息,就不会被存到session里了,逻辑清晰也不容易报错。

  • 全局设置排除字段(你提到的Handler方法)
    如果你想让所有验证失败场景都排除特定字段,在app/Exceptions/Handler.php里修改dontFlash属性是完全可行的:

    protected $dontFlash = ['password', 'password_confirmation', 'credit_card'];
    

    不过要注意,这个设置是全局生效的,覆盖所有异常触发的闪存操作,如果你只是想针对表单请求做限制,第一个方法会更精准。

  • 重写表单请求的flash方法
    还有个更直接的思路,在表单请求类里重写flash方法,自定义闪存逻辑:

    protected function flash()
    {
        // 只闪存除了指定字段之外的输入数据
        $this->session()->flashInput($this->except(['password', 'confirm_password']));
    }
    

    这个方法会在验证失败时自动调用,专门处理输入数据的闪存,针对性很强。

内容的提问来源于stack exchange,提问作者adam78

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:57:56