Laravel Eloquent empty() 函数在 $request->url 有值时返回 true
Posted
技术标签:
【中文标题】Laravel Eloquent empty() 函数在 $request->url 有值时返回 true【英文标题】:Laravel Eloquent empty() function returns true for $request->url when there is a value 【发布时间】:2015-09-26 11:25:56 【问题描述】:我有一个包含用户输入并提交的 url 链接的请求(在 Laravel 中)。
SomeRequest ▼
+request: ParameterBag ▼
#parameters: array:4 ▼
"title" => "cake"
"url" => "www.someurl.com"
在我的控制器中,当我调用 empty($request->url)
时,它返回 true,即使它实际上不是空的。我试图寻找这个困境的答案,但无济于事。
谢谢。
【问题讨论】:
请改用!isset($var) || $var == false
。 empty()
是一个 php 函数,它肯定可以工作。此外,据我所知,您的对象有一个带有url1
的键,但没有带有url
的键,所以empty
应该是true
检查您想要获取的输入和参数。
我用过dd(empty($request->url), $request->url);
,它给了我true
和"www.someurl.com"
我有多个 title 和 url 参数,但是,我意外地将它们混合到我的问题中,因为我只需要 1 就可以用来提问。我已经修复它们并删除了“1”。
【参考方案1】:
问题在于$request->url
不是正常 属性。在内部调用魔术方法__get()
,然后通过其他一些方法从参数包中返回值。
empty()
不知道,只是检查(与isset()
相同的方式)该属性是否存在。这就是为什么即使你可以访问url
,你也会得到false
。
最好的解决方案可能是检查has()
:
$request->has('url'); // returns true
请注意,有一种方法可以在框架中“修复”。那就是通过实现 __isset()
的魔术方法,在运行 empty
或 isset
检查时调用该方法。
【讨论】:
明白了。我认为它不是一个普通的字符串,因为它是一个对象属性而不是文字字符串。谢谢。以上是关于Laravel Eloquent empty() 函数在 $request->url 有值时返回 true的主要内容,如果未能解决你的问题,请参考以下文章
php Laravel 5 Eloquent CheatSheet #laravel #eloquent