Laravel 8表单验证失败后如何返回原输入并回填到表单对应字段?
Laravel 8表单验证失败自动回填原有输入实现方案
1. 视图层核心修改
Laravel 内置了old()辅助函数,用于读取验证失败后闪存到 Session 的用户输入。为了同时兼容「新增表单」和「编辑表单」两种场景,优先级设置为:优先读取验证失败的旧输入,无旧输入时读取编辑场景的原有数据,新增场景下默认值为空避免报错。
修改后的视图代码如下:
<div class="form-group"> <label>{{__("Coupon Code")}} <span class="text-danger">*</span></label> <input type="text" maxlength="50" required value="{{ old('code', $row->code ?? '') }}" placeholder="{{__("Unique Code")}}" name="code" class="form-control"> </div>
参数说明:
- 第一个参数对应表单字段的
name属性值 - 第二个参数为默认值,
?? ''用于兼容新增场景下$row对象不存在的情况,避免抛出变量未定义错误
2. 控制器层说明
你当前使用的$request->validate()验证方式,Laravel 8 默认在验证失败时会自动重定向到上一页,同时自动将用户输入闪存到 Session 中,不需要额外修改代码。
如果你是手动使用 Validator 类做验证,需要在返回重定向时手动调用withInput()方法闪存输入,示例如下:
public function store( Request $request,$id ){ $validator = \Validator::make($request->all(), [ 'code'=>[ 'required', 'max:50', 'string', 'alpha_dash', Rule::unique('bravo_coupons')->ignore($id > 0 ? $id : false) ], 'amount'=>['required'], ]); if ($validator->fails()) { return redirect()->back() ->withErrors($validator) ->withInput(); // 手动闪存用户输入 } // 后续业务逻辑 }
3. 其他字段扩展
所有需要回填的表单字段都可以按相同逻辑修改value属性即可,比如金额字段:
<input type="number" name="amount" value="{{ old('amount', $row->amount ?? '') }}" class="form-control">
内容的提问来源于stack exchange,提问作者Yassin
相关产品推荐
相关产品推荐

