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 == falseempty() 是一个 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() 的魔术方法,在运行 emptyisset 检查时调用该方法。

【讨论】:

明白了。我认为它不是一个普通的字符串,因为它是一个对象属性而不是文字字符串。谢谢。

以上是关于Laravel Eloquent empty() 函数在 $request->url 有值时返回 true的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Eloquent 判断取出的结果集是否为空

判断Laravel Eloquent获取数据结果集是否为空

laravel 查询数据返回的结果

php Laravel 5 Eloquent CheatSheet #laravel #eloquent

php Laravel 5 Eloquent CheatSheet #laravel #eloquent

php Laravel 5 Eloquent CheatSheet #laravel #eloquent