Was ist das Pipeline-Muster?
Das Pipeline-Muster ist ein Entwurfsmuster, bei dem ein Verarbeitungsobjekt (das „Passable”) durch eine Reihe von Pipes (Verarbeitungsschritte) geschickt wird. Jede Pipe erhält die Ausgabe der vorherigen Stufe, wendet ihre Verarbeitung an und reicht das Ergebnis an die nächste weiter. In Laravel implementiert die KlasseIlluminate\Pipeline\Pipeline dieses Muster — die Middleware-Verarbeitung funktioniert exakt nach diesem Prinzip.
Einsatzstellen im Laravel-Kern
Die Pipeline wird im Kern von Laravel breit eingesetzt.- HTTP-Middleware —
Illuminate\Foundation\Http\Kernelschickt Requests durch die Middleware-Pipeline - Console-Commands — Vor- und Nachverarbeitung von Artisan-Befehlen
- Router-Middleware — Middleware-Anwendung auf Route-Gruppen
Grundlegende Verwendung
send / through / thenReturn
Die einfachste Pipeline-Konstruktion:send($passable)— Das Objekt, das durch die Pipeline geschickt wird.through($pipes)— Das Array der Pipes.thenReturn()— Führt die Pipeline aus und gibt das Ergebnis zurück.
then
Wollen Sie die Endverarbeitung als Closure angeben, verwenden Siethen().
pipe
Um nachträglich eine Pipe hinzuzufügen, nutzen Siepipe().
Klassenbasierte Pipes
Statt Closures verwenden Sie dedizierte Klassen für bessere Wiederverwendbarkeit. Jede Pipe-Klasse implementiert die Methodehandle.
via — aufzurufende Methode ändern
Standardmäßig wird die Methodehandle der Pipe aufgerufen. Über via() können Sie einen anderen Methodennamen setzen.
Parameter an Pipes übergeben
Sie können mit: und , am Klassennamen Parameter an Pipes übergeben — dieselbe Mechanik wie die Middleware-Syntax throttle:60,1.
finally — Verarbeitung nach dem Ende der Pipeline
Mitfinally() registrieren Sie einen Callback, der nach dem Pipeline-Ende garantiert ausgeführt wird — unabhängig von Erfolg oder Fehler.
withinTransaction — Ausführung in einer Transaktion
Ab Laravel 11 können Sie die gesamte Pipeline innerhalb einer Datenbanktransaktion laufen lassen.Praxisbeispiel: Pipeline für die Bestellverarbeitung
Beispiel für die Bestellverarbeitung eines E-Commerce-Systems, aufgebaut aus mehreren Pipes.1
Pipe-Klassen erstellen
2
Pipeline ausführen
Interner Aufbau von Pipeline
Die Methodecarry() ist das Herzstück der Pipeline. Mit array_reduce werden die Pipes von rechts nach links gefaltet und zu einer verketteten Closure zusammengebaut.
array_reverse werden die Pipes umgekehrt und an array_reduce übergeben, damit die Aufrufreihenfolge stimmt. Der Closure-Stack wird von innen nach außen aufgebaut, sodass die erste Pipe zuerst ausgeführt wird.
Kombination mit dem Macroable-Trait
DiePipeline-Klasse nutzt den Trait Macroable — Sie können eigene Methoden ergänzen.
Nächste Schritte
Macroable-Trait
Lernen Sie, wie Sie mit dem Macroable-Trait bestehenden Klassen eigene Methoden hinzufügen.