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

Laravel如何获取含点符号的嵌套表单旧输入值?

解决Laravel中获取带有点符号的数组字段旧值问题

这个问题我之前也碰到过,Laravel的点符号解析逻辑在这里确实容易让人踩坑!

问题原因

你的字段名settings[custom_plan.breakpoint1]实际上是将settings作为一个一维数组,其中的键是带点的字符串custom_plan.breakpoint1,而不是嵌套数组settings['custom_plan']['breakpoint1']。直接使用old('settings[custom_plan.breakpoint1]')或old('settings.custom_plan\.breakpoint1')会让Laravel错误地将点符号解析为嵌套数组的层级分隔符,自然无法正确获取到目标值。

可行解决方法

方法1:直接从old数组中取值(带空值防护)

直接取出old('settings')返回的数组,然后访问带点的键名,同时用??运算符处理空值场景,避免报错:

{{ old('settings')['custom_plan.breakpoint1'] ?? '' }}

方法2:使用Arr::get辅助函数(更安全优雅)

Laravel的Arr::get工具函数可以安全地从数组中取值,自动处理数组或键不存在的情况,适合这种场景:

{{ Arr::get(old('settings'), 'custom_plan.breakpoint1', '') }}

第三个参数是默认值,这里设为空字符串,你可以根据需求修改。

方法3:修改字段名(可选)

如果项目允许修改表单字段名,建议将点符号替换为下划线或其他无歧义符号,比如settings[custom_plan_breakpoint1],这样就能直接用Laravel常规的点符号语法取值:

{{ old('settings.custom_plan_breakpoint1') }}

补充说明

你提到转义点在验证规则中有效,这是因为验证规则的解析逻辑支持通过转义点来表示实际的点字符;但old()函数的参数解析逻辑不同,转义的方式在这里无法生效,所以需要用上面的方法来绕过这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 06:56:26