【问题标题】:Laravel old() input occasionally returns an arrayLaravel old() 输入偶尔会返回一个数组
【发布时间】:2021-01-21 20:04:00
【问题描述】:

我的错误跟踪器显示以下 Blade 行的一些例外情况:

<input
    type="email"
    id="email"
    name="email"
    value="{{ old('email') }}"
>
htmlspecialchars() expects parameter 1 to be string, array given

这是由 old() 帮助器引起的,它以某种方式检索 'email' 的数组而不是字符串。

现在通常,当提交带有此输入的表单时,old('email') 值应该只包含一个字符串,而控制器会为了验证目的而重定向回来。但是,我注意到一些 hack 脚本正在我的应用程序上运行,它们试图通过发送特定的 POST 有效负载并尝试 url 来破坏内容。

其中一个负载必须采用&amp;email[]=abc&amp;email[]=def 的形式或以数组形式发送电子邮件输入的其他语法。默认登录验证器'email' =&gt; 'required|string' 似乎没有过滤它,最终我在视图中出现错误。

我正在寻找一种使用尽可能少的代码来消除此异常的简单方法,因为这种情况在许多视图中都会发生。这样的事情就足够了,但它有点令人费解,因为它从会话中检索了两次 'email' 键:

{{ is_string(old('email')) ? old('email') : null }}

因此,欢迎任何建议缩短此语法,最好不要两次检索会话变量。

【问题讨论】:

  • 你也可以创建自己的函数来执行此操作并调用你的函数,然后它只是一个函数调用,没有三元
  • 是的,你是对的,我做了一个优雅的解决方案,我会添加它作为答案。

标签: laravel laravel-blade


【解决方案1】:

我决定制作一个新函数,它是old() 的略微修改版本:

// app/helpers.php


if (!function_exists('old_string')) {
    /**
     * Wrapper for `old()` helper that doesn't break when arrays manage to get in.
     * @param string $key
     * @param mixed $default
     * @return string|null
     */
    function old_string($key, $default = null)
    {
        $val = old($key, $default);
        return is_string($val) ? $val : null;
    }
}

这样我可以在我特别期望字符串的视图中使用old_string('email'),而不会弄乱原始函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-07
    • 2020-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多