URL: http://localhost/?v=
Code:
Route::get('/', ['as' => 'home', function()
{
dd(Request::has('v'));
}]);
Sortie: false
Que se passe-t-il? Est-ce un bug ou est-ce que je fais quelque chose de mal?
Request::has()
vérifiera si l'élément est réellement défini. Une chaîne vide ne compte pas ici.
Ce que vous recherchez à la place est: Request::exists()
!
Route::get('/', ['as' => 'home', function()
{
dd(Request::exists('v'));
}]);
Mise à niveau vers Laravel 5.5 ou supérieur. Ils ont changé cela pour que maintenant cela fonctionne comme prévu à l'origine.
Dans le Laravel 5.5 guide de mise à niveau , nous lisons ce qui suit:
La méthode
has
La méthode
$request->has
renverra désormaistrue
même si la valeur d'entrée est une chaîne vide ounull
. Une nouvelle méthode$request->filled
a été ajoutée. Elle fournit le comportement précédent de la méthodehas
.
La méthode $request->exists
fonctionne toujours, c’est juste un alias pour $request->has
.
$request->exists
: Détermine si la demande contient une clé d'élément d'entrée donnée.$request->has
: Détermine si la demande contient une valeur non vide pour un élément d'entrée.$request->exists
: Alias pour $request->has
$request->has
: Détermine si la demande contient une clé d'élément d'entrée donnée.$request->filled
: Détermine si la demande contient une valeur non vide pour un élément d'entrée.Si vous cliquez sur les commandes ci-dessus, vous pouvez extraire le code source et constater qu'il est simplement renommé exists
en has
, has
en filled
, puis alias exists
en has
.
Vous voudrez peut-être vérifier ceci. depuis la méthode $request->has()
et sa propriété peuvent offrir l’accès pour demander Origin.
Il est correct d'utiliser $request->has('username')
. Cela vérifiera si les attributs <input type="text" name="username" />
du nom d'utilisateur existent réellement ou si la chaîne params/.query a réellement cette clé sur la requête globale.
Quant à moi, ce n'est pas un bug, mais une fonctionnalité :) Dans votre exemple, v
est fourni, mais il est vide.
Dans code-cadre vous trouverez ceci:
if ($this->isEmptyString($value)) return false;
Ainsi, si une chaîne vide est fournie, la méthode has()
renverra false
. Cela a du sens pour moi, dans la plupart des cas, je veux ce comportement.
Utilisez Request::filled()
car, contrairement à Request::has()
, il vérifie également si le paramètre n'est pas vide.