![Laravel 13.21 : l'attribut #[RouteKey] simplifie la résolution des modèles Eloquent](/assets/laravel-13-21-l-attribut.webp?v=3zipf)
Ce changement touche un mécanisme utilisé dans pratiquement toutes les applications Laravel en production: la résolution implicite des modèles depuis les paramètres d'URL. Pour une audience de développeurs PHP et d'architectes, c'est un nettoyage d'interface qui se traduit directement en moins de code à maintenir.
#[RouteKey]: binding déclaratif, fin du boilerplate
Le mécanisme existant imposait de surcharger getRouteKeyName sur chaque modèle nécessitant une colonne de résolution autre que la clé primaire. L'attribut #[RouteKey] suit le pattern déjà établi par #[ObservedBy] et #[ScopedBy]: déclaratif, ancré au niveau de la classe.
#[RouteKey('slug')]
class Post extends Model {}L'attribut indique la colonne utilisée pour la résolution implicite des routes. Sans attribut, le fallback reste la clé primaire. La contribution (@nimnaherath, PR #60841) élimine une méthode à surcharger — un gain net sur la lisibilité et la maintenabilité. En production, le bénéfice est immédiat pour tout projet utilisant des slugs plutôt que des IDs dans les URLs. Plus de boilerplate sur chaque modèle.
Validation base64, injection d'attributs requête
Deux ajouts plus discrets mais opérationnels:
- Règle
base64(PR #60808, @lucasmichot): validation conforme RFC 4648 en mode strict. Le check impose un encodage canonique — la valeur doit décoder puis ré-encoder vers la chaîne identique. Padding incorrect et caractères parasites rejetés. Coût d'une double passe d'encodage marginal sur des payloads courts, négligeable en contexte web typique. - Attribut
#[RequestAttribute]: injection directe dans les paramètres résolus des contrôleurs. Quand un middleware stocke un objet résolu — tenant, organisation, clé API — sur le sac d'attributs de la requête, le contextuel évite l'appel manuel à$request->attributes->getavec typage à la main. Gain de concision, zéro impact runtime mesurable.
Image, Concurrency et architecture
Le composant Image (introduit en 13.20) gagne toPng, toGif, toAvif et toBmp dans son API fluide. Le correctif 13.21.1 répare le mapping MIME manquant pour AVIF dans Image::extension — sans quoi le stockage produisait une extension .bin au lieu de .avif.
Côté architecture: Illuminate\Concurrency obtient son propre subsplit en lecture seule. Les packages publiés individuellement — Routing, Database, etc. — étaient déjà découplés; Concurrency rejoint le lot. Pour les déploiements ciblés, une dépendance de moins à tirer si le composant n'est pas utilisé. Enfin, Application::configure gagne une propriété protected static $applicationBuilder permettant aux sous-classes de fournir leur propre builder sans surcharger la méthode complète.
Verdict
Mise à jour mineure par convention de versioning, mais les gains concrets sont tangibles: moins de boilerplate sur le binding, formats image enfin complets, composant Concurrency découplé. Aucun blocker connu pour la production. À intégrer dans le cycle de mise à jour courant.