Laravel 5.5中redirect back with input功能失效求助
Laravel 5.5 redirect back with input/errors 失效排查与解决
我来帮你梳理下这个问题,从你给出的代码和描述来看,主要是redirect()->back()带错误信息和保留输入的功能没生效,咱们一步步来修复:
1. 先补全并规范withErrors的用法
你代码里的withErrors('verif...')明显没写完,而且Laravel的withErrors()更推荐用关联数组来绑定错误信息到对应表单字段,这样视图里能精准提示。另外你提到要保留用户输入,必须加上withInput()方法,不然之前输入的验证码会丢失。修改后的else分支应该是这样:
return redirect()->back() ->withErrors(['verification_code' => '验证码错误,请重新输入']) ->withInput(); // 关键:加上这个才能保留用户之前输入的内容
如果只是想传全局错误提示,也可以直接传字符串,但视图里要对应调整获取方式。
2. 确保视图正确渲染错误和旧输入
在你的表单视图里,要正确调用old()函数获取之前的输入,同时输出对应字段的错误信息,比如验证码输入框部分:
<div class="form-group"> <label for="verification_code">验证码</label> <input type="text" name="verification_code" id="verification_code" value="{{ old('verification_code') }}"> @if($errors->has('verification_code')) <span class="text-danger">{{ $errors->first('verification_code') }}</span> @endif </div>
注意表单字段的name属性要和控制器里的$request['verification_code']完全一致,不然old()函数拿不到值。
3. 检查会话目录权限(兜底排查)
Laravel的错误信息和旧输入都是存在会话里的,默认用文件驱动,所以要确保storage/framework/sessions目录有读写权限,权限不足会导致会话无法保存,自然看不到错误和输入内容。
完整优化后的控制器方法
把你的代码补全优化后,最终版本是这样:
public function verifyMobileCode(Request $request) { $userId = Auth::user()->id; if (Auth::user()->verification_code == $request['verification_code']) { User::where('id', $userId)->update(['verified' => 1]); return redirect('/')->with('success', 'Account verified.'); } else { // 带错误信息和旧输入返回上一页,排除csrf_token只保留有用输入 return redirect()->back() ->withErrors(['verification_code' => '验证码不正确,请重新输入']) ->withInput($request->except('_token')); } }
这样应该就能正常实现“返回上一页+保留输入+显示错误提示”的功能啦~
内容的提问来源于stack exchange,提问作者Purushotam Sangroula
相关产品推荐
相关产品推荐

