Laravel如何合并数据库取值与old()旧输入值实现表单回填?
Laravel 表单回填优先展示旧输入的实现方案
Laravel 内置的 old() 辅助函数原生支持第二个参数作为默认 fallback 值,刚好匹配你的需求,正确写法如下:
value="{{ old('street_address', $client->street_address) }}"
逻辑说明
- 当 session 中存在上次提交的旧输入(一般是表单校验失败跳转回页面的场景)时,
old()会优先返回旧输入值,忽略传入的默认参数 - 当没有旧输入时,会自动返回第二个参数的值,也就是你从数据库中取出的
$client->street_address
兼容新增/编辑共用表单场景
如果同一个表单同时用于新增和编辑操作,新增场景下 $client 变量可能不存在,需要额外做判空处理:
PHP 8.0+ 版本(支持Nullsafe运算符)
value="{{ old('street_address', $client?->street_address ?? '') }}"
PHP 低版本兼容写法
value="{{ old('street_address', isset($client) ? $client->street_address : '') }}"
注意事项
要保证旧输入回显正常,需要确保校验失败后重定向回表单页时携带了输入数据:
- 使用 Laravel 自带的
$request->validate()校验规则时,校验失败会自动重定向并携带输入,无需额外处理 - 如果是手动写校验逻辑,返回重定向时需要链式调用
withInput()方法,示例:
return back()->withErrors($validator)->withInput();
内容的提问来源于stack exchange,提问作者Tech Orbeet
相关产品推荐
相关产品推荐

