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

Laravel Blade中如何为动态ID输入框设置old()对应的name属性

解决Laravel Blade动态ID输入框的old()旧值保留问题

嘿,这个问题的核心其实很简单——old() 函数完全依赖表单的 name 属性来获取提交后的旧值,和输入框的 id 没有任何关联!哪怕你的 id 是像 group-{{$category->id}} 这样动态生成的,只要把 name 属性和 old() 的参数对应好,就能完美保留旧输入。

我给你分几种常见场景举例说明:

1. 单个动态字段(非数组形式)

如果每个分类对应的输入框是独立字段,可以把 name 设置成带动态标识的字符串,比如:

<input 
    type="text" 
    id="group-{{$category->id}}" 
    name="group_{{$category->id}}" 
    value="{{ old("group_$category->id") }}"
>

这里 name 会生成 group_1、group_2 这类格式,old() 里直接用对应的字符串就能取值——比如当 $category->id 为1时,old('group_1') 就会返回该字段提交前的内容。

2. 数组形式的动态字段(推荐批量场景)

如果是多个分类的输入框,更推荐用数组格式的 name,后端处理起来更方便,old() 也能轻松匹配:

<input 
    type="text" 
    id="group-{{$category->id}}" 
    name="groups[{{$category->id}}]" 
    value="{{ old('groups.' . $category->id) }}"
>

这种情况下,name 会变成 groups[1]、groups[2],后端可以通过 $request->input('groups') 直接拿到一个「键为分类ID、值为输入内容」的数组。而 old('groups.' . $category->id) 或者 old("groups[$category->id]") 都能正确获取对应字段的旧值。

3. 复杂嵌套字段的情况

如果你的字段是嵌套结构(比如每个分类下还有子字段),逻辑也是一样的:

<input 
    type="text" 
    id="group-{{$category->id}}" 
    name="categories[{{$category->id}}][group_name]" 
    value="{{ old('categories.' . $category->id . '.group_name') }}"
>

这里 old() 用点语法或者数组语法都可行,比如 old("categories[$category->id][group_name]") 也能正常工作。

关键总结

  • id 只是前端DOM的标识(用于JS操作、label关联等),和后端的旧值保留逻辑完全无关;
  • 只要 name 属性的格式和 old() 函数的参数完全对应,就能正确拉取到表单提交后的旧输入;
  • 数组形式的 name 更适合批量处理同类型动态字段,后端接收和维护都更高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:00:50