veilletech.fr
6 nov. Feed du jour
#03 LARAVEL Article

Laravel 13.40 : avec strict, abc123 ne vaut plus 0

Un défaut qui ne vaut qu'en cas d'absence ne vous protège de rien.

Laravel 13.40 ajoute un argument strict aux helpers integer(), float(), boolean() et string(). Sans lui, une valeur invalide passe par un cast PHP : abc123 devient 0, maybe devient false, un tableau fait échouer string(). Avec strict: true, la valeur invalide renvoie le défaut fourni, y compris null.

2 min de lecturedébutantvidéo 1:19
Partager
Sommaire6 sections
  1. Ce qui se passe
  2. Le piège, sans strict
  3. Les règles de strict
  4. Où ça marche
  5. Strict ou validation ?
  6. À retenir

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

PHP
$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ées

Rien 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

PHP
$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();

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.