You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 23:06:04