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

Bal*_*ald 22 laravel laravel-5

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

码:

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

输出: false

到底是怎么回事?这是一个错误还是我做错了什么?

luk*_*ter 51

Request::has()将检查项目是否实际设置.这里没有空字符串.

你要找的是:Request::exists()!

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

  • 这**在5.5**中改变了.现在`has`也执行`exists`,`has`的功能已经被移动到`filled`.[见我的回答.](/sf/answers/3358136701/) (3认同)

tot*_*dli 37

TL;博士

升级到Laravel 5.5或更高版本.他们改变了这一点,现在它按照你原先的预期工作.

说明

Laravel 5.5升级指南中,我们阅读以下内容:

has方法

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

$request->exists方法仍然有效,它只是一个别名$request->has.

检查源代码

如果你点击上面的命令,你可以检查出的源代码,并看到他们真的只是改名existshas,hasfilled,然后别名existshas.


don*_*ona 5

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


Del*_*ino 5

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

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