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
相关产品推荐
相关产品推荐

