Laravel Pipeline with DB transaction support, events and additional methods.
The package requires PHP 8.1 or higher and Laravel 10 or higher.
Install the package using composer:
composer require michael-rubel/laravel-enhanced-pipelineImport modified pipeline to your class:
use MichaelRubel\EnhancedPipeline\Pipeline;Then use the pipeline:
Pipeline::make()
->withEvents()
->withTransaction()
->send($data)
->through([
// your pipes
])
->onFailure(function ($data, $exception) {
// do something when exception caught
return $data;
})->then(function ($data) {
// do something when all pipes completed their work
return $data;
});You can as well instantiate the pipeline using the service container or manually:
app(Pipeline::class)
...
(new Pipeline(app()))
...
(new Pipeline)
->setContainer(app())
...You can use the run method to execute a single pipe:
$pipeline = Pipeline::make();
$pipeline->run(Pipe::class, $data);By default, run uses the handle method in your class as an entry point, but if you use a different method name in your pipelines, you can fix that by adding code to your ServiceProvider:
$this->app->resolving(Pipeline::class, function ($pipeline) {
return $pipeline->via('execute');
});If you want to override the original Pipeline resolved through IoC Container, you can add binding in the ServiceProvider register method:
$this->app->singleton(\Illuminate\Pipeline\Pipeline::class, \MichaelRubel\EnhancedPipeline\Pipeline::class);Usage of withTransaction method will enable a manual DB transaction throughout the pipeline execution.
Usage of withEvents method will enable Laravel Events throughout the pipeline execution.
PipelineStarted- fired when the pipeline starts working;PipelineFinished- fired when the pipeline finishes its work;PipeExecutionStarted- fired before execution of the pipe;PipeExecutionFinished- fired after execution of the pipe.
composer test- chefhasteeth for base implementation of DB transaction in Pipeline.
- rezaamini-ir for inspiration to create a pipeline with
onFailuremethod. See #PR
The MIT License (MIT). Please see License File for more information.
