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
相关产品推荐
相关产品推荐

