Laravel Eloquent empty()函数在$request->url有值时返回true


Laravel Eloquent empty() function returns true for $request->url when there is a value

我有一个包含url链接的请求,用户输入并提交(在Laravel中)。

SomeRequest ▼
  +request: ParameterBag ▼
    #parameters: array:4 ▼
      "title" => "cake"
      "url" => "www.someurl.com"

在我的控制器中,当我调用empty($request->url)时,它返回true,即使它实际上不是空的。我曾试图寻找解决这个困境的办法,但无济于事。

谢谢。

问题是$request->url不是正常的属性。内部调用魔术方法__get(),然后通过其他几个方法从参数包返回值。

empty()不知道这一点,只是检查(与isset()相同的方式)如果属性存在。这就是为什么你得到false,即使你可以访问url

最好的解决方案可能是检查has():

$request->has('url'); // returns true

请注意,有一种方法可以在框架中"修复"这个问题。这是通过实现魔术方法__isset(),当emptyisset检查运行时调用。