Qu’est-ce que le pattern pipeline
Le pattern pipeline fait circuler un objet à traiter (passable) au travers d’une série de pipes (étapes de traitement). Chaque pipe reçoit la sortie de l’étape précédente, y ajoute son traitement et passe le résultat au pipe suivant. Dans Laravel, la classeIlluminate\Pipeline\Pipeline implémente ce pattern. Le traitement des middlewares fonctionne exactement de cette manière.
Utilisations dans le cœur de Laravel
Le pipeline est largement utilisé au cœur de Laravel.- Middleware HTTP —
Illuminate\Foundation\Http\Kernelfait passer la requête dans un pipeline de middlewares. - Commandes de console — pré/post-traitement des commandes Artisan.
- Middlewares du Router — application des middlewares d’un groupe de routes.
Utilisation de base
send / through / thenReturn
C’est la forme la plus simple.send($passable)— spécifie l’objet à faire passer dans le pipeline.through($pipes)— spécifie le tableau de pipes.thenReturn()— exécute le pipeline et retourne le résultat.
then
Pour spécifier le traitement final via une closure, utilisezthen().
pipe
Pour ajouter un pipe après coup, utilisezpipe().
Pipes basés sur des classes
En utilisant des classes dédiées à la place de closures, la réutilisabilité augmente. Chaque classe implémente une méthodehandle.
via — changer la méthode appelée
Par défaut, la méthodehandle du pipe est invoquée, mais via() permet d’utiliser un autre nom de méthode.
Passer des paramètres aux pipes
Vous pouvez passer des paramètres à un pipe en utilisant: et , dans le nom de classe. C’est le même mécanisme que la syntaxe throttle:60,1 des middlewares.
finally — traitement après le pipeline
finally() permet d’enregistrer un callback exécuté systématiquement après le pipeline, qu’il ait réussi ou échoué.
withinTransaction — exécution dans une transaction
Depuis Laravel 11, le pipeline entier peut s’exécuter à l’intérieur d’une transaction de base de données.Exemple pratique : pipeline de traitement de commande
Voici un exemple de traitement de commande e-commerce structuré en plusieurs pipes.1
Créer les classes de pipe
2
Exécuter le pipeline
Implémentation interne du Pipeline
La méthodecarry() est le cœur du pipeline. Elle utilise array_reduce pour replier les pipes de droite à gauche et construire une chaîne de closures.
array_reverse avant de les passer à array_reduce, l’ordre d’appel est préservé : la pile de closures se construit depuis l’intérieur, de sorte que le premier pipe s’exécute en premier.
Combinaison avec le trait Macroable
La classePipeline utilise le trait Macroable, ce qui vous permet d’ajouter vos propres méthodes.
Étapes suivantes
Trait Macroable
Découvrez comment ajouter vos propres méthodes aux classes existantes avec le trait Macroable.