Ce qui se passe
Les helpers de requête de Laravel lisent une valeur et la convertissent en un appel. Le défaut qu'on leur passe ne
joue pourtant que si la clé est absente ; une valeur présente mais invalide passe par un cast PHP ordinaire.
Laravel 13.40 ajoute un argument nommé strict : à true, une valeur invalide renvoie le défaut au lieu d'être
forcée. Contribution de Chris Morrell (PR #62254).
Le piège, sans strict
$perPage = $request->integer('per_page', 25);
// /posts?per_page=abc123 → 0, car (int) 'abc123' vaut 0
$name = $request->string('name');
// /search?name[]=chris → erreur « Array to string conversion »
$notify = $request->boolean('notify', true);
// ?notify=maybe → false : les notifications sont coupéesRien ne casse franchement : la liste affiche zéro résultat, ou un réglage bascule sans que personne l'ait demandé.
Les règles de strict
$perPage = $request->integer('per_page', 25, strict: true);
$price = $request->float('max_price', 100.0, strict: true);
$notify = $request->boolean('notify', true, strict: true);
$sort = $request->string('sort', 'created_at', strict: true)->lower();integer(): refuse décimales, zéros en tête et nombres trop grands pour unintPHP.float(): accepte les entiers et la notation exponentielle, refuse les séparateurs de milliers.boolean():0,false,offetnovalent faux ; une valeur ni vraie ni fausse, commemaybe, renvoie le défaut. Casse et espaces sont ignorés.string(): chaînes et nombres passent ; tableaux, booléens etnullrenvoient le défaut, toujours dans unStringable.?sort=vide, transformé ennullpar le middleware, renvoie aussi le défaut — sansstrict, on obtenait une chaîne vide.- Dans un JSON, un booléen envoyé à
integer()oufloat()renvoie le défaut.
En mode strict, le défaut est rendu tel quel, sans conversion. Un défaut null revient donc null, ce qui distingue
enfin « pas de limite » d'une limite à zéro. Il peut aussi être une closure, exécutée seulement si besoin. Attention :
les docblocks déclarent toujours int et float, et l'analyse statique peut signaler un défaut null.
Où ça marche
Le drapeau vient du trait InteractsWithData : Request, Fluent, ValidatedInput ($request->safe()),
UriQueryString (Uri::query()), ComponentAttributeBag (les $attributes d'un composant Blade) et CommandInput
($this->input() dans une commande Artisan).
Strict ou validation ?
strict renvoie un défaut et continue, sans prévenir personne. C'est adapté aux paramètres optionnels : taille de
page, tri, filtre d'une liste. Pour une donnée requise, ou quand une saisie fausse est une erreur que l'utilisateur
doit corriger — une quantité commandée, par exemple —, la validation reste la bonne réponse.
Source : Laravel News. Source en anglais.