1. Accueil
  2. Articles
6 min de lecture
0 vues

Laravel 13.4 : La mise à jour qui va révolutionner votre quotidien de développeur !

Vous pensiez que Laravel ne pouvait pas être meilleur ? Détrompez-vous ! La version 13.4 vient de sortir et elle est énorme. Imaginez : des files d'attente que vous pouvez enfin examiner de près, et des requêtes de formulaire qui ne laissent passer aucune donnée non désirée. C'est un peu comme avoir un super-pouvoir pour votre code. Prêt à découvrir ces nouveautés qui vont vous faire gagner un temps précieux ? Accrochez-vous, on vous explique tout !

Sommaire de l'article

Introduction

Laravel 13.4 est une mise à jour mineure, mais elle est remplie de fonctionnalités pensées pour les développeurs. Sortie il y a quelques jours , elle se concentre sur deux piliers essentiels : la gestion des files d'attente (queues) et la validation des données entrantes. Si vous en avez marre de chercher pourquoi un job est bloqué ou de craindre qu'un champ inattendu ne perturbe votre API, cette version est pour vous. On vous détaille les changements clés, avec des exemples et des astuces pour les mettre en œuvre immédiatement. Allons-y !

Améliorations de l'attribut Delay : Un comportement enfin harmonisé

Vous connaissiez peut-être l'attribut PHP #[Delay], introduit dans Laravel 13.3 pour retarder l'exécution d'un job. C'est pratique, mais il y avait un gros hic : il ne fonctionnait pas partout ! Le Bus Dispatcher (celui qui gère l'envoi standard d'une tâche) l'ignorait et préférait lire la propriété delay de votre classe. Résultat ? Un comportement incohérent et des bugs difficiles à traquer.

Ce qui a changé ?

Dans Laravel 13.4, l'attribut #[Delay] est maintenant universellement supporté. Il fonctionne correctement avec le Bus Dispatcher et le NotificationSender. Désormais, votre intention (définie par l'attribut) est toujours respectée, peu importe comment le job est dispatché. C'est la fin de la confusion entre attribut et propriété.

Exemple concret

1use Illuminate\Queue\Attributes\Delay;
2use Illuminate\Bus\Queueable;
3use Illuminate\Contracts\Queue\ShouldQueue;
4 
5#[Delay(30)] // Sera maintenant respecté !
6class ProcessInvoice implements ShouldQueue
7{
8 use Dispatchable, Queueable;
9 
10 // ...
11}
1use Illuminate\Queue\Attributes\Delay;
2use Illuminate\Bus\Queueable;
3use Illuminate\Contracts\Queue\ShouldQueue;
4 
5#[Delay(30)] // Sera maintenant respecté !
6class ProcessInvoice implements ShouldQueue
7{
8 use Dispatchable, Queueable;
9 
10 // ...
11}

L'analogie du chef d'orchestre : Avant, le chef (le dispatcher) n'écoutait que les musiciens qu'il voyait bien (la propriété). Maintenant, il prête attention à la partition écrite sur le pupitre (l'attribut), et tout le monde joue enfin en harmonie !

Nouvelles méthodes d'inspection des files d'attente : La fin de la débrouille

Déboguer une file d'attente, on vous le laisse : c'est souvent un cauchemar. Vous vous connectez en SSH, vous jonglez avec les commandes Artisan, et vous espérez trouver le job qui pose problème. Laravel 13.4 met fin à cette époque révolue avec trois nouvelles méthodes sur la facade Queue.

Les trois super-pouvoirs de débogage

Ces méthodes vous permettent d'inspecter l'état de vos jobs pour les pilotes de file d'attente database et redis. Elles retournent une collection d'objets InspectedJob riches en informations.

  1. Queue::pendingJobs() : Liste les jobs prêts à être traités immédiatement.
  2. Queue::delayedJobs() : Liste les jobs en attente de leur délai (par exemple, planifiés dans le futur).
  3. Queue::reservedJobs() : Liste les jobs actuellement en cours de traitement par un worker.

Des données détaillées, enfin !

Contrairement à l'ancienne méthode Queue::size() qui ne donnait qu'un nombre, chaque InspectedJob :

  • uuid : L'identifiant unique du job.
  • name : Le nom complet de la classe du job (ex: App\Jobs\SendEmail).
  • attempts : Le nombre de tentatives d'exécution déjà effectuées.
  • createdAt : La date de création du job.

Exemple pratique

1use Illuminate\Support\Facades\Queue;
2 
3// Compter les jobs en attente par type
4$pendingCounts = Queue::pendingJobs()->countBy('name');
5// ['App\Jobs\SendEmail' => 1842, 'App\Jobs\ProcessOrder' => 43]
6 
7// Trouver le nom du premier job en cours sur une file spécifique
8$jobName = Queue::reservedJobs('high-priority')->first()->name;
9// 'App\Jobs\SendEmail'
10 
11// Lister tous les jobs retardés (delayed) avec leur date de création
12Queue::delayedJobs()->each(function ($job) {
13 echo "{$job->name} (créé le {$job->createdAt->format('d/m/Y H:i')})\n";
14});
1use Illuminate\Support\Facades\Queue;
2 
3// Compter les jobs en attente par type
4$pendingCounts = Queue::pendingJobs()->countBy('name');
5// ['App\Jobs\SendEmail' => 1842, 'App\Jobs\ProcessOrder' => 43]
6 
7// Trouver le nom du premier job en cours sur une file spécifique
8$jobName = Queue::reservedJobs('high-priority')->first()->name;
9// 'App\Jobs\SendEmail'
10 
11// Lister tous les jobs retardés (delayed) avec leur date de création
12Queue::delayedJobs()->each(function ($job) {
13 echo "{$job->name} (créé le {$job->createdAt->format('d/m/Y H:i')})\n";
14});

L'analogie du vigile à l'entrée d'une boîte de nuit : Avant, vous pouviez seulement dire "Il y a 100 personnes dans la file". Maintenant, vous pouvez voir qui est dans la file, quand il est arrivé, et pour quelle raison il patiente. Vous devenez le vigile avec un écran de contrôle HD !

Mode strict pour les Form Requests : Votre application, votre forteresse

C'est LA fonctionnalité majeure de cette version. Elle va changer la façon dont vous pensez à la sécurité et à la validation dans vos contrôleurs. Jusqu'à présent, un FormRequest validait le contenu des champs déclarés dans la méthode rules(), mais ignorait silencieusement tout autre champ envoyé. Un client malveillant ou une erreur frontend pouvait ajouter un champ is_admin=1 à une requête, et il passait sans souci. Scary, non ?

Le principe du mode strict

Activez-le, et toute requête contenant un champ non déclaré dans vos règles de validation sera rejetée avec une erreur. C'est comme installer un détecteur de métal à l'entrée de votre application : seuls les champs "autorisés" passent.

Comment l'activer ? Deux options simples

Option 1 : Activation globale (recommandée pour les nouveaux projets)

Dans la méthode boot() de votre App\ServiceProvider :

1use Illuminate\Foundation\Http\FormRequest;
2 
3public function boot(): void
4{
5 // Active le mode strict partout, sauf en production (par sécurité)
6 FormRequest::failOnUnknownFields(! app()->isProduction());
7}
1use Illuminate\Foundation\Http\FormRequest;
2 
3public function boot(): void
4{
5 // Active le mode strict partout, sauf en production (par sécurité)
6 FormRequest::failOnUnknownFields(! app()->isProduction());
7}

Option 2 : Activation ciblée par classe (plus granulaire)

Utilisez l'attribut PHP #[FailOnUnknownFields] directement sur votre classe de requête .

1use Illuminate\Foundation\Http\Attributes\FailOnUnknownFields;
2use Illuminate\Foundation\Http\FormRequest;
3 
4#[FailOnUnknownFields]
5class StoreUserRequest extends FormRequest
6{
7 public function rules(): array
8 {
9 return [
10 'name' => 'required|string',
11 'email' => 'required|email',
12 ];
13 }
14}
1use Illuminate\Foundation\Http\Attributes\FailOnUnknownFields;
2use Illuminate\Foundation\Http\FormRequest;
3 
4#[FailOnUnknownFields]
5class StoreUserRequest extends FormRequest
6{
7 public function rules(): array
8 {
9 return [
10 'name' => 'required|string',
11 'email' => 'required|email',
12 ];
13 }
14}

Note importante : Vous pouvez désactiver ce comportement pour une requête spécifique (par exemple, une webhook qui reçoit des données variables) en utilisant #[FailOnUnknownFields(false)].

Pourquoi c'est génial ?

  • Sécurité renforcée : Élimine les risques d'injection de données non désirées.
  • Clarté accrue : Force une définition explicite de l'API attendue par votre contrôleur.
  • Débogage simplifié : Les erreurs de validation pointent immédiatement vers le champ problématique.

Conclusion : Laravel 13.4, un allié de poids

Laravel 13.4 prouve une fois de plus que le framework ne cesse d'évoluer pour répondre aux vraies douleurs des développeurs. La correction de l'attribut Delay et les nouvelles méthodes d'inspection des files d'attente vous donnent un contrôle inédit sur vos processus en arrière-plan. Mais c'est le mode strict pour les Form Requests qui constitue la avancée la plus significative, renforçant la sécurité et la prévisibilité de vos applications de manière simple et élégante.

Ces améliorations ne sont pas des gadgets : elles sont le résultat d'une communauté active et d'une volonté de rendre le développement web plus robuste et plus agréable. Alors, qu'attendez-vous pour mettre à jour vos projets et découvrir ces nouvelles fonctionnalités ? Votre code (et votre tranquillicité d'esprit) vous remercieront !


Dernière mise à jour : 2026-04-14 (Basée sur la sortie de Laravel 13.4.0)