Request::has() returns false 即使存在参数
Request::has() returns false even when parameter is present
URL: http://localhost/?v=
代码:
Route::get('/', ['as' => 'home', function()
{
dd(Request::has('v'));
}]);
输出:false
这是怎么回事?这是一个错误还是我做错了什么?
对我而言,这不是错误,而是功能:) 在您的示例中提供了 v
,但它是空的。
在 framework code 你会发现这个:
if ($this->isEmptyString($value)) return false;
因此,如果提供空字符串 has()
方法将 return false
。这对我来说很有意义,在大多数情况下我想要这种行为。
Request::has()
将检查该项目是否实际设置。此处不计算空字符串。
您要查找的是:Request::exists()
!
Route::get('/', ['as' => 'home', function()
{
dd(Request::exists('v'));
}]);
tl;博士
升级到 Laravel 5.5 或更高版本。 他们对此进行了更改,因此现在它可以像您最初预期的那样工作了。
说明
在Laravel 5.5 upgrade guide中,我们阅读了以下内容:
The has
Method
The $request->has
method will now return true
even if the input value is an empty string or null
. A new $request->filled
method has been added that provides the previous behavior of the has
method.
$request->exists
方法仍然有效,只是an alias for $request->has
。
检查源代码
- 在Laravel 5.4中:
$request->exists
:判断请求是否包含给定的输入项key。
$request->has
:确定请求是否包含输入项的非空值。
- 在Laravel 5.5中:
$request->exists
:$request->has
的别名
$request->has
:判断请求是否包含给定的输入项key。
$request->filled
:确定请求是否包含输入项的非空值。
如果你点击上面的命令,你可以查看源代码并看到它们只是将 exists
重命名为 has
,has
重命名为 filled
, 然后别名 exists
到 has
.
使用Request::filled()
因为不像Request::has()
,它还会检查参数是否不为空。
你可能想看看这个。因为 $request->has()
方法及其 属性 可以提供对请求源的访问。
可以使用 $request->has('username')
这将检查 <input type="text" name="username" />
用户名属性是否实际存在或 params/.query 字符串是否在全局请求中实际具有该键。
URL: http://localhost/?v=
代码:
Route::get('/', ['as' => 'home', function()
{
dd(Request::has('v'));
}]);
输出:false
这是怎么回事?这是一个错误还是我做错了什么?
对我而言,这不是错误,而是功能:) 在您的示例中提供了 v
,但它是空的。
在 framework code 你会发现这个:
if ($this->isEmptyString($value)) return false;
因此,如果提供空字符串 has()
方法将 return false
。这对我来说很有意义,在大多数情况下我想要这种行为。
Request::has()
将检查该项目是否实际设置。此处不计算空字符串。
您要查找的是:Request::exists()
!
Route::get('/', ['as' => 'home', function()
{
dd(Request::exists('v'));
}]);
tl;博士
升级到 Laravel 5.5 或更高版本。 他们对此进行了更改,因此现在它可以像您最初预期的那样工作了。
说明
在Laravel 5.5 upgrade guide中,我们阅读了以下内容:
The
has
MethodThe
$request->has
method will now returntrue
even if the input value is an empty string ornull
. A new$request->filled
method has been added that provides the previous behavior of thehas
method.
$request->exists
方法仍然有效,只是an alias for $request->has
。
检查源代码
- 在Laravel 5.4中:
$request->exists
:判断请求是否包含给定的输入项key。$request->has
:确定请求是否包含输入项的非空值。
- 在Laravel 5.5中:
$request->exists
:$request->has
的别名
$request->has
:判断请求是否包含给定的输入项key。$request->filled
:确定请求是否包含输入项的非空值。
如果你点击上面的命令,你可以查看源代码并看到它们只是将 exists
重命名为 has
,has
重命名为 filled
, 然后别名 exists
到 has
.
使用Request::filled()
因为不像Request::has()
,它还会检查参数是否不为空。
你可能想看看这个。因为 $request->has()
方法及其 属性 可以提供对请求源的访问。
可以使用 $request->has('username')
这将检查 <input type="text" name="username" />
用户名属性是否实际存在或 params/.query 字符串是否在全局请求中实际具有该键。