Laravel 即使参数存在,Request::has()也返回false
URL: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
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'));
}]);