Laravel 表单验证失败跳转后 withInput() 无法返回表单值问题解决
问题根因
- 最核心的原因是你当前验证失败后的重定向逻辑没有调用
withInput()方法:Laravel不会默认将用户提交的表单数据闪存到Session中,必须手动调用withInput()才会把输入值存入单次有效Session,供跳转后的页面读取。 - 其他可能的衍生原因:如果已调用该方法仍拿不到值,通常是路由未归属
web中间件组(Session闪存依赖web中间件中的会话启动逻辑)、或是前端模板未使用old()辅助函数读取旧输入值。
修复步骤
- 首先修改验证失败后的重定向代码,补充
withInput()调用:
if ($validator->fails()) { return redirect('admin/page/create') ->withErrors($validator) ->withInput(); // 新增这行,闪存所有表单输入值 }
- 前端表单模板对应位置使用
old()方法读取旧值,你的场景是多语言数组格式的字段,参考写法:
{{-- 循环语言渲染输入框时的示例写法 --}} @foreach($languages as $lang) <input type="text" name="PageLanguage.title[{{ $lang->id }}]" value="{{ old('PageLanguage.title.'.$lang->id) }}"> @endforeach
- 额外校验:确认你的路由定义是在
routes/web.php中,或是已经手动给路由加了web中间件,保证Session功能正常生效。
内容的提问来源于stack exchange,提问作者Mexdi
相关产品推荐
相关产品推荐

