Laravel 8 新建编辑页复用公共表单时值无法回填问题
问题根本原因
Form::model()的自动模型数据绑定能力,仅对Laravel Collective自身生成的表单控件生效,它不会主动给你手写的原生HTML input标签注入value值。
你之前只给old() 辅助函数传了空字符串作为默认值:当处于编辑页首次加载、没有表单验证失败产生的闪存old数据时,old()直接返回空字符串,自然读不到绑定的仓库模型数据。而Laravel Collective生成的控件内部已经封装了「优先读old闪存数据 → 其次读Form::model绑定的模型对应字段 → 最后读手动传入的默认值」的逻辑,所以不需要手动写value也能正常回填。
具体修复方案
不需要改现有引入公共片段的结构,只需要给fields.blade.php里所有原生input标签补全正确的value取值逻辑,同时兼容新建、编辑、验证报错回显三个场景即可:
- 所有input的value属性统一用
old(字段名, 模型对应字段 ?? 空值)的格式书写,利用PHP的空合并运算符兼容新建页无模型实例的场景,避免报变量不存在的错误。 - 逐字段修改示例:
{{-- 仓库编号no字段 --}} <input type="number" class="form-control" placeholder="No" id="no" name="no" value="{{ old('no', $warehouse->no ?? '') }}" > {{-- 仓库编码wh_code字段 --}} <input type="text" class="form-control" placeholder="Warehouse Code" id="wh_code" name="wh_code" value="{{ old('wh_code', $warehouse->wh_code ?? '') }}" > {{-- 地址address1字段 --}} <input type="text" class="form-control" placeholder="Address" id="address1" name="address1" value="{{ old('address1', $warehouse->address1 ?? '') }}" > {{-- 注册日期reg_date字段 --}} <input type="date" class="form-control" placeholder="dd/yy/mm" id="reg_date" name="reg_date" value="{{ old('reg_date', $warehouse->reg_date ?? '') }}" >
额外优化提示
你编辑页路由参数里写的collect($warehouse)->first()属于冗余写法,如果控制器往编辑页传的是单个Warehouse模型实例,直接传$warehouse->id即可,不需要套集合方法,不过这个写法不影响表单数据回填逻辑。
内容的提问来源于stack exchange,提问作者maxasela
相关产品推荐
相关产品推荐

