【发布时间】: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 来破坏内容。
其中一个负载必须采用&email[]=abc&email[]=def 的形式或以数组形式发送电子邮件输入的其他语法。默认登录验证器'email' => 'required|string' 似乎没有过滤它,最终我在视图中出现错误。
我正在寻找一种使用尽可能少的代码来消除此异常的简单方法,因为这种情况在许多视图中都会发生。这样的事情就足够了,但它有点令人费解,因为它从会话中检索了两次 'email' 键:
{{ is_string(old('email')) ? old('email') : null }}
因此,欢迎任何建议缩短此语法,最好不要两次检索会话变量。
【问题讨论】:
-
你也可以创建自己的函数来执行此操作并调用你的函数,然后它只是一个函数调用,没有三元
-
是的,你是对的,我做了一个优雅的解决方案,我会添加它作为答案。
标签: laravel laravel-blade