Entre les versions 13.17 et 13.27, Laravel a publié onze versions mineures en moins de trois mois, touchant le routage, les connexions base de données, les files d'attente, le traitement d'images, la validation et la sécurité.

refreshForUpdate() in a transaction
DB::transaction(function () use ($product) {
    $product->refreshForUpdate();

    if ($product->stock === 0) {
        throw new RuntimeException('Product is out of stock.');
    }

    $product->decrement('stock');
});

La 13.17 introduit une méthode metadata() sur les routes, permettant d'attacher des données arbitraires comme un titre de page sans détourner le tableau d'action ; les métadonnées définies au niveau d'un groupe se propagent automatiquement aux routes enfants. Cette version ajoute aussi le support natif des proxies de pooling PostgreSQL comme PgBouncer, RDS Proxy ou Neon, via un indicateur "pooled" combiné à une URL "direct" séparée pour que des commandes comme les migrations contournent le pooler.

La 13.18 améliore l'observabilité des files d'attente : l'événement WorkerStopping expose désormais jobsProcessed et lastJobProcessedAt, et schedule:work intercepte SIGINT, SIGTERM et SIGQUIT afin qu'une tâche planifiée en cours puisse se terminer avant l'arrêt, utile sous Kubernetes.

La 13.19 ajoute le support du verbe HTTP QUERY via Http::query(), la méthode de collection reduceInto() pour modifier directement un objet accumulateur, et Str::counted() pour formater des quantités comme "3 orders".

La 13.20 livre un composant de traitement d'images maison, Illuminate\Image, pour redimensionner, recadrer et convertir les formats, supprimant le besoin d'intégrer manuellement Intervention Image. Chaque transformation renvoie une nouvelle instance immuable, ce qui permet de dériver plusieurs variantes d'une même image source. Le composant s'appuie en option sur Intervention Image v4, à installer séparément via Composer. Cette version ajoute aussi l'attribut #[WithoutMiddleware] pour exclure un middleware sur une méthode précise.

La 13.21 ajoute l'attribut #[RouteKey] pour définir la colonne de liaison de modèle de route sur un modèle Eloquent sans surcharger de méthode, de nouveaux formats de sortie d'image (PNG, GIF, AVIF, BMP), et une règle de validation base64 conforme à la RFC 4648.

La 13.22 introduit Validator::fakeDnsLookups() pour éviter que les tests utilisant active_url ou email:dns échouent à cause d'instabilités réseau, ainsi que l'attribut #[BindWhen] pour des liaisons de conteneur conditionnelles évaluées via une closure, ce qui nécessite PHP 8.5.

La 13.23 ajoute un pilote de log mensuel pour les applications qui n'ont pas besoin d'une rotation quotidienne, et renforce la sécurité en rendant systématique l'usage de hash_equals() pour la comparaison du secret de mode maintenance, au lieu d'un mélange avec l'opérateur ==.

La 13.24 ajoute dominantColor() pour extraire une couleur de remplacement pendant le chargement d'une image, accepte désormais les fichiers HEIC et HEIF au lieu de les rejeter, et introduit la règle de validation arrayKeys qui restreint les clés autorisées dans un tableau.

La 13.25 permet de mettre en pause ou de reprendre toutes les files d'attente nommées d'un seul coup avec queue:pause --all et queue:resume --all, au lieu de le faire une par une. La commande artisan dev adopte une nouvelle interface terminal basée sur @laravel/multiplex, avec des onglets distincts pour le serveur, la file d'attente, Vite et les logs, et un redémarrage automatique en cas de plantage. Image implémente aussi désormais l'interface Responsable, permettant de la retourner directement depuis une route.

La 13.26 ajoute un pilote de système de fichiers "read-through" qui lit d'abord depuis un disque principal puis bascule vers un disque ancien si le fichier est absent, tout en promouvant automatiquement les fichiers consultés vers le disque principal, ce qui facilite les migrations de stockage progressives. L'attribut #[DebounceFor], auparavant réservé aux jobs, fonctionne désormais aussi sur les écouteurs d'événements en file d'attente.

La 13.27, la dernière en date, ajoute l'option de configuration base de données mask_bindings_in_exception_messages, qui remplace les valeurs liées par des espaces réservés "?" dans les messages de QueryException, empêchant des données comme des adresses e-mail de fuiter dans les logs, la table failed_jobs ou les outils d'APM ; getBindings() continue de renvoyer les valeurs réelles pour le débogage. Elle ajoute aussi whereBinary() pour des comparaisons de colonnes sensibles à la casse sur MySQL et MariaDB sans SQL brut, et refreshForUpdate(), une méthode Eloquent qui rafraîchit une instance de modèle déjà chargée en appliquant lockForUpdate() en un seul appel, évitant de devoir requêter à nouveau le modèle par sa clé primaire à l'intérieur d'une transaction.