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

Laravel表单验证后如何保留已填写字段内容?

解决Laravel表单验证失败后字段内容清空的问题

这是个很常见的Laravel表单开发问题,我来帮你快速搞定!核心原因是你当前只从$account变量读取填充值,但当验证失败页面重定向时,用户刚才提交的输入并没有被复用——其实Laravel已经帮你把这些输入存在session里了,我们只需要用old()辅助函数来读取就行。

具体修改方法

你需要把每个输入框的value属性改成优先使用旧输入值,再 fallback 到$account的默认值,这样不管是首次加载页面,还是验证失败重定向回来,输入框都能正确显示内容:

比如原来的name输入框:

<input class="form-control" name="name" id="regular2" type="text" value="@if($account){{$account['name']}} @endif" >

改成:

<input class="form-control" name="name" id="regular2" type="text" value="{{ old('name', $account['name'] ?? '') }}" >

同理,address输入框修改为:

<input class="form-control" name="address" id="regular2" type="text" value="{{ old('address', $account['address'] ?? '') }}" >

为什么这样有效?

  • old('字段名'):Laravel会从session中获取用户上一次提交的对应字段值,只有当session中没有这个值时(比如首次打开页面),才会使用后面的默认值。
  • $account['name'] ?? '':用null合并运算符处理$account可能不存在的情况,避免报错,优雅地 fallback 为空字符串。

修改后的完整表单片段

<form role="form" class="form margin-bottom-0" action="{{ url('/test') }}" method="post" enctype="multipart/form-data"> 
    {{ csrf_field() }} 
    <div class="box box-widget widget-use padding-40 padding-top-0 box-shadow-none"> 
        <div class="row"> 
            <div class="col-md-6"> 
                <div class="form-group floating-label {{ $errors->has('name') ? ' has-error' : '' }}"> 
                    <input class="form-control" name="name" id="regular2" type="text" value="{{ old('name', $account['name'] ?? '') }}" > 
                    <label for="regular2" >@lang('payment.full_name')</label> 
                    @if ($errors->has('name')) 
                        <span class="help-block"> 
                            <strong>{{ $errors->first('name') }}</strong> 
                        </span> 
                    @endif 
                </div> 
            </div> 
            <div class="col-md-6"> 
                <div class="form-group floating-label {{ $errors->has('address') ? ' has-error' : '' }}"> 
                    <input class="form-control" name="address" id="regular2" type="text" value="{{ old('address', $account['address'] ?? '') }}" > 
                    <label for="regular2">@lang('payment.address')</label> 
                    @if ($errors->has('address')) 
                        <span class="help-block"> 
                            <strong>{{ $errors->first('address') }}</strong> 
                        </span> 
                    @endif 
                </div> 
            </div> 
        </div> 
    </div> 
    <button type="submit" class="btn save-lang savecard">@lang('buttons.save_changes')</button> 
</form>

这样修改后,当表单验证失败页面重定向时,用户之前填写的内容就会自动保留在输入框里了。

内容的提问来源于stack exchange,提问作者Lila

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:40:08