Skip to main content

Wat is het pipelinepatroon?

Het pipelinepatroon is een designpattern waarbij een te verwerken object (de passable) achtereenvolgens door een reeks pipes (verwerkingsstappen) wordt geleid. Elke pipe ontvangt de uitvoer van de vorige stap, voegt bewerking toe en geeft het door aan de volgende stap. In Laravel implementeert de klasse Illuminate\Pipeline\Pipeline dit patroon, en de verwerking van middleware werkt precies volgens dit mechanisme.

Waar het in de Laravel-core wordt gebruikt

De pipeline wordt breed ingezet in de kern van Laravel.
  • HTTP-middlewareIlluminate\Foundation\Http\Kernel leidt de request door de middleware-pipeline
  • Consolecommando’s — voor- en nabewerking van Artisan-commando’s
  • Middleware van de router — het toepassen van middleware op routegroepen
Laten we kijken naar het deel waar de HTTP-kernel de pipeline gebruikt.

Basisgebruik

send / through / thenReturn

De eenvoudigste opbouw van een pipeline.
  • send($passable) — geeft het object op dat door de pipeline gaat
  • through($pipes) — geeft de array van pipes op
  • thenReturn() — voert de pipeline uit en geeft het resultaat terug

then

Wil je de laatste bewerking als closure opgeven, dan gebruik je then().

pipe

Om achteraf pipes toe te voegen, gebruik je pipe().

Klassegebaseerde pipes

Door dedicated klassen te gebruiken in plaats van closures, verhoog je de herbruikbaarheid. Elke pipe-klasse implementeert een handle-methode.

via — de aan te roepen methode wijzigen

Standaard wordt de handle-methode van de pipe aangeroepen, maar met via() kun je een andere methodenaam opgeven.

Parameters doorgeven aan pipes

Met : en , in de klassenaam kun je parameters aan een pipe doorgeven. Dit is hetzelfde mechanisme als de middleware-syntaxis zoals throttle:60,1.

finally — verwerking na afloop van de pipeline

Met de finally()-methode registreer je een callback die na afloop van de pipeline altijd wordt uitgevoerd — ongeacht succes of falen.

withinTransaction — uitvoeren binnen een transactie

Sinds Laravel 11 kun je de hele pipeline binnen een databasetransactie uitvoeren.
Je kunt ook een specifieke databaseverbinding opgeven.
Als er in een van de pipes een exception optreedt, wordt de hele transactie teruggedraaid.

Praktijkvoorbeeld: een orderverwerkingspipeline

Een voorbeeld waarin de orderverwerking van een webshop uit meerdere pipes is opgebouwd.
1

Maak de pipe-klassen

2

Voer de pipeline uit

De interne implementatie van Pipeline

De carry()-methode is het hart van de pipeline. Met array_reduce worden de pipes van rechts naar links gevouwen tot een keten van closures.
Door de pipes met array_reverse om te keren en aan array_reduce door te geven, blijft de aanroepvolgorde correct. De closure-stack wordt van binnen naar buiten opgebouwd, zodat de eerste pipe als eerste wordt uitgevoerd.
De pipeline wordt ook wel de “ui-architectuur” genoemd. De request gaat van de buitenste laag (de eerste pipe) naar binnen, en de response komt van binnen weer naar buiten. Daarom kan elke middleware zowel vóór als ná het aanroepen van $next() bewerkingen toevoegen.

Combineren met de Macroable-trait

Omdat de Pipeline-klasse de Macroable-trait gebruikt, kun je er eigen methodes aan toevoegen.

Volgende stap

Macroable-trait

Leer hoe je met de Macroable-trait eigen methodes toevoegt aan bestaande klassen.
Laatst gewijzigd op 6 september 2026