【问题标题】:Laravel get old input with dot notationLaravel 使用点符号获取旧输入
【发布时间】:2023-03-15 06:41:01
【问题描述】:

我输入的名字如下: <input name="settings[custom_plan.breakpoint1]"/>

如何检索old 输入?由于点符号适用于输入数组,但不适用于实际名称。所以old('settings[custom_plan.breakpoint1]') 不起作用,old('settings.custom_plan\.breakpoint1') 也不起作用(转义点在验证符号中起作用)。

如何检索输入的旧值?

谢谢!

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    您可以使用old() 获取整个数组,然后“手动”提取值:

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

    不幸的是,没有办法为此使用点符号。 old() helper 使用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 是的,我同意。如果您只是避免输入名称中的点(如果在您的情况下是可能的),那可能是最好的。
    • 是的,这似乎是现在唯一的解决方案。我将使用它作为快速修复,看看我是否能找到解决方案,或者提交一个拉取请求来解决这个问题。
    猜你喜欢
    • 2023-03-19
    • 2021-04-10
    • 2021-09-30
    • 1970-01-01
    • 1970-01-01
    • 2016-06-08
    • 2020-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多