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

Laravel 即使参数存在,Request::has()也返回false,laravel,laravel-5,Laravel,Laravel 5,URL:http://localhost/?v= 代码: 输出:false 发生了什么事?这是一个bug还是我做错了什么?至于我,这不是bug,而是特性:)在您的示例中提供了v,但它是空的 在中,您会发现: if($this->isEmptyString($value))返回false; 所以,如果提供了空字符串has()方法将返回false。这对我来说是有意义的,在大多数情况下,我想要这种行为。Request::has()将检查项目是否已实际设置。此处不计算空字符串 您要查找的是:Reque

URL:
http://localhost/?v=

代码:

输出:
false


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

至于我,这不是bug,而是特性:)在您的示例中提供了
v
,但它是空的

在中,您会发现:

if($this->isEmptyString($value))返回false;
所以,如果提供了空字符串
has()
方法将返回
false
。这对我来说是有意义的,在大多数情况下,我想要这种行为。

Request::has()
将检查项目是否已实际设置。此处不计算空字符串

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

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

解释 在报告中,我们阅读了以下内容:

具有
方法

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

$request->exists
方法仍然有效,它只是

检查源代码
  • 在Laravel 5.4中:
    • :确定请求是否包含给定的输入项键
    • :确定请求是否包含输入项的非空值
  • 在Laravel 5.5中:
    • :用于
      $request->has的别名
    • :确定请求是否包含给定的输入项键
    • :确定请求是否包含输入项的非空值

如果单击上面的命令,您可以查看源代码,并看到它们实际上刚刚重命名为
exists
has
has
filled
,然后别名为
exists
has

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

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


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

您是否尝试过
输入::has('v')
<代码>输入::has()
仅当变量存在并且我相信它有一个值时才起作用。是的,我有。同样的结果。隐马尔可夫模型。。。在这种情况下,我想我必须使用
isset($\u GET['v'])
,因为Laravel 5.5
已经()
按照您的预期工作。这正是我想要的:)谢谢。@llukasgeiter。谢谢它帮了我很多。这在5.5中改变了。现在,
has
也执行
存在的功能
,并且
has
的功能已被移动到
填充中
@totymedli在这方面帮助了我。在5.5之前的laravel版本中可以安全地使用
exists()
,因为它使用
Array::has()
,确保参数不为空,即null、空字符串、空数组。PS:在L5.4上测试时,有时has方法返回true,即使参数不存在。但填充效果与预期一致。我不知道为什么没有按预期工作。
Route::get('/', ['as' => 'home', function()
{
    dd(Request::has('v'));
}]);
Route::get('/', ['as' => 'home', function()
{
    dd(Request::exists('v'));
}]);