Laravel 13.30 est sorti le 2 septembre 2026 avec de nouvelles méthodes de collection, un durcissement des chemins Storage, des diagnostics de workers et plusieurs correctifs.
$products->chunkBy('parent');
collect([1, 1, 2, 2, 1, 1])->chunkBy(fn ($value) => $value);
// [[1, 1], [2, 2], [1, 1]]chunkBy() transforme le cas d'usage le plus courant de chunkWhile() en méthode dédiée : un nouveau chunk démarre dès que la valeur résolue d'une clé ou d'un callback change. Comme la clé est résolue via data_get(), des notations pointées telles que chunkBy('address.city') fonctionnent aussi, et chaque chunk résultant conserve ses clés de tableau d'origine. Contribution de @JosephSilber dans la PR #61357.
Storage::path() ne contourne plus la normalisation des chemins. Tous les autres appels filesystem passent par le driver Flysystem, qui lève PathTraversalDetected quand un chemin sort de la racine du disque. path() transmettait jusqu'ici la chaîne brute au PathPrefixer de Flysystem : sur le disque local par défaut, path('../../../.env') renvoyait un chemin natif vers le .env de l'application alors que get() et delete() refusaient le même argument. path() applique désormais WhitespacePathNormalizer avant le préfixage ; le code qui reposait sur des segments .. lève maintenant une exception.
queue:work écrit la raison d'arrêt du worker en dernière ligne, par exemple "Worker STOPPED Memory limit exceeded", et émet avec --json un enregistrement structuré contenant level, status, reason, exit_code, jobs_processed, memory et timestamp. L'énum WorkerStopReason gagne une méthode description() couvrant neuf scénarios de sortie, de interrupted à job timed out. Rien n'est écrit avec --quiet ou --silent.
DevCommands reçoit deux filtres optionnels : withoutVendorCommands() exclut les commandes enregistrées depuis vendor/, withoutDefaultCommands() celles du framework (serve, queue:listen, pail, Vite). Les commandes de l'application sont préservées ; le filtrage s'appuie sur la même valeur d'origine que DevCommands suivait déjà pour les collisions de noms.
Les DSN natifs sqlsrv: pour Microsoft SQL Server sont désormais détectés avant le parsing d'URL et traités par un parseur dédié qui extrait hôte, port, base et options PDO_SQLSRV comme Encrypt, TrustServerCertificate, MultiSubnetFailover, ApplicationIntent et LoginTimeout. Auparavant, parse_url() lisait tout le DSN comme un chemin et corrompait la configuration. La convention sqlsrv://user:pass@host:port/database reste fonctionnelle.
Artisan::commandNamed('app:my-command') renvoie une instance de commande ou null sans instancier toutes les commandes enregistrées, contrairement à Artisan::all(). La queue Laravel Cloud implémente totalPendingSize(), totalDelayedSize() et totalReservedSize() en sommant managedQueues() ; SQS renvoie 0 car il ne peut énumérer les queues.
Parmi les correctifs : route:cache restaure l'application des façades après le bootstrap de sa copie jetable (les façades pointaient auparavant vers un conteneur abandonné, provoquant une LogicException sous php artisan optimize), Request::clamp() retombe sur la valeur par défaut pour les entrées non numériques au lieu d'une erreur 500, db:seed restaure la connexion par défaut via try/finally, setVisibility() passe par readerFor() sur les disques read-through, Queue::createPayloadUsing() n'exige plus de connexion résolue, les infobulles de la page d'exception s'affichent avec allowHTML: false par défaut, les includes JSON:API imbriqués se résolvent au bon niveau, spl_object_id() remplace spl_object_hash() dans le conteneur et le builder Eloquent, et un correctif contre l'expansion quadratique des règles wildcard a été backporté en 12.x.




Commentaires
Pas encore de commentaire — écris le premier.
Lance la discussion
Pas de compte ni de mot de passe — saisis simplement ton adresse e-mail et nous t’envoyons un lien de connexion à usage unique. Première visite ? Tout se met en place automatiquement.
Ton évaluation sera appliquée automatiquement après ta connexion.
Vérifie ta boîte mail
Nous avons envoyé un lien de connexion à …. Ouvre-le sur cet appareil — cet onglet te connectera automatiquement.
Rien reçu ? Vérifiez le dossier spam — et marquez le message « Non spam » pour qu'il arrive directement la prochaine fois.