Laravel使用点表示法获取旧输入值

5

我的输入名称如下:

<input name="settings[custom_plan.breakpoint1]"/>

如何检索其 输入?由于点表示法适用于输入数组,但不适用于实际名称。因此,old('settings[custom_plan.breakpoint1]') 不起作用,old('settings.custom_plan\.breakpoint1') 也不起作用(在验证表示法中转义点是有效的)。

如何检索输入的旧值?

谢谢!

1个回答

2
你可以使用 old() 获取整个数组,然后“手动”提取值:
{{ old('settings')['custom_plan.breakpoint1'] }}

很遗憾,无法使用点表示法。 old() 辅助函数使用 Illuminate\Support\Arr@get 方法,以下是关键代码片段:
foreach (explode('.', $key) as $segment) {
    if (static::accessible($array) && static::exists($array, $segment)) {
        $array = $array[$segment];
    } else {
        return value($default);
    }
}

正如您所看到的,它首先将键按点分割,然后搜索嵌套数组值。因此,在输入名称中解析点作为分隔符是不可避免的。

我曾想到过这个,但是这样做会让代码变得相当不方便和丑陋,例如像 <input value="{{ old('settings') ? old('settings')['custom_plan.breakpoint1'] : $custom_plan->breakpoint1 }}"/> 或者类似的检查(一开始old('settings')会返回 null,所以我无法从中提取数组项)。 - Giedrius
@Giedrius 是的,我同意。如果可能的话,最好避免在输入名称中使用点号(如果这在您的情况下是可能的)。 - Martin Heralecký
是的,现在看来似乎只有这个解决方案了。我会将其用作快速修复,并查看是否可以找到解决方案或者提交拉取请求以解决此问题。 - Giedrius

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接