即使参数存在,Request :: has()也返回false

时间:2015-03-23 19:22:52

标签: laravel laravel-5

网址:http://localhost/?v=

代码:

Route::get('/', ['as' => 'home', function()
{
    dd(Request::has('v'));
}]);

输出:false

发生了什么事?这是一个错误还是我做错了什么?

5 个答案:

答案 0 :(得分:46)

Request::has()将检查项目是否实际设置。空字符串在这里不算数。

您要找的是:Request::exists()

Route::get('/', ['as' => 'home', function()
{
    dd(Request::exists('v'));
}]);

答案 1 :(得分:29)

TL;博士

升级到Laravel 5.5或更高版本。他们改变了这一点,现在它可以按照您的预期工作。

说明

Laravel 5.5 upgrade guide中,我们阅读以下内容:

  

has方法

     

即使输入值为空字符串或$request->hastrue方法现在也会返回null。添加了一个新的$request->filled方法,该方法提供了has方法的先前行为。

$request->exists方法仍有效,只有an alias for $request->has

检查源代码

如果您点击上面的命令,可以查看源代码,看看他们刚刚将exists重命名为hashas改为filled,然后别名existshas

答案 2 :(得分:5)

您可能想检查一下。因为$request->has()方法和it属性可以提供对请求来源的访问。

可以使用$request->has('username'),这将检查<input type="text" name="username" />用户名属性是否确实存在,或者params / .query字符串是否在全局请求中实际具有该键。

答案 3 :(得分:2)

至于我,它不是一个错误,而是功能:)在您的示例v中提供,但它是空的。

framework code中,您会发现:

if ($this->isEmptyString($value)) return false;

因此,如果提供空字符串,has()方法将返回false。这对我来说很有意义,在大多数情况下我都想要这种行为。

答案 4 :(得分:1)

使用Request::filled()是因为与Request::has()不同,它还会检查参数是否为空。