Laravel 5.5视图页面验证消息不显示问题求助
解决Laravel 5.5视图不显示验证消息的问题
嘿,我一眼就揪出问题所在了——你用try-catch把$this->validate()调用给包裹起来啦!
Laravel的验证器在验证失败时,会自动抛出ValidationException,框架本身会处理这个异常:它会把错误消息存入session,自动带着用户输入的数据跳回之前的页面,这样视图里的$errors变量才能正常读取到错误信息。但你现在把这个异常手动catch住了,然后返回了自定义的back()->with('error'),直接跳过了框架的自动处理流程,自然视图里就拿不到验证错误了。
具体修复方案
1. 调整控制器逻辑,让框架自动处理验证异常
把验证代码移出try-catch块,让框架自己处理验证失败的情况,try-catch只用来处理后续的业务异常(比如图片上传、数据库保存失败):
public function save(Request $request) { // 先执行验证,失败的话框架自动跳转并携带错误信息 $this->validate($request, Country::rules()); try { $file = $request->file('flag_image'); /*图片上传代码*/ if(Input::hasFile('flag_image')){ $file = Input::file('flag_image'); $destinationPath = public_path(). '/images/admin/country/'; $filename = $file->getClientOriginalName(); $image = time().$filename; $file->move($destinationPath, $image); $imgpath = 'images/admin/country/'.$image; } if($file) { $request->merge(['flag_image' => $imgpath]); } /*图片上传代码结束*/ $country = Country::saveOrUpdate($request); if($file) { $country->flag_image = $imgpath; $country->save(); } if($country !== false) { return redirect()->route('lists-country')->with('success', trans('Country data added successfully.!!')); } else { return back()->with('error', "Unable to save country data.!!")->withInput(); } } catch (\Exception $ex) { return back()->with('error', "Unable to save country data.!!")->withInput(); } }
2. 关于Handler.php的配置说明
你把ValidationException加入$dontReport的操作其实没问题——框架本来就不会把验证异常计入错误日志,这个配置和视图里的错误显示没有关系,保持当前配置就好。
3. 确认视图代码的正确性
你的视图代码是完全正确的,@if ($errors->any())的写法没问题,只要框架正常把错误存入session,这里就能正常渲染错误列表。
特殊场景补充:如果必须手动捕获验证异常
如果你有特殊需求,一定要手动处理验证异常,那需要在catch块里手动把错误消息传入session,示例如下:
catch (\Illuminate\Validation\ValidationException $ex) { // 手动将验证错误传入session,确保视图能拿到$errors变量 return back()->withErrors($ex->errors())->withInput(); }
不过这种场景很少见,大部分情况下让框架自动处理验证异常就足够了。
内容的提问来源于stack exchange,提问作者Javed
相关产品推荐
相关产品推荐

