michael-rubel / laravel-enhanced-pipeline
Laravel Pipeline with DB transaction support, events and additional methods.
Fund package maintenance!
paypal.me/observername
Installs: 13 763
Dependents: 1
Suggesters: 0
Security: 0
Stars: 53
Watchers: 3
Forks: 3
Open Issues: 0
Requires
- php: ^8.1
- illuminate/contracts: ^10.0|^11.0
- spatie/laravel-package-tools: ^1.12
Requires (Dev)
- larastan/larastan: ^2.0
- laravel/pint: ^1.0
- nunomaduro/collision: ^7.0|^8.0
- orchestra/testbench: ^8.0|^9.0
- phpunit/phpunit: ^9.5|^10.5
README
Laravel Enhanced Pipeline
Laravel Pipeline with DB transaction support, events and additional methods.
The package requires PHP 8.1
or higher and Laravel 10
or higher.
#StandWithUkraine
Installation
Install the package using composer:
composer require michael-rubel/laravel-enhanced-pipeline
Usage
Import 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);
Transaction
Usage of withTransaction
method will enable a manual DB transaction
throughout the pipeline execution.
Events
Usage of withEvents
method will enable Laravel Events
throughout the pipeline execution.
Available events
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.
Testing
composer test
Credits
- chefhasteeth for base implementation of DB transaction in Pipeline.
- rezaamini-ir for inspiration to create a pipeline with
onFailure
method. See #PR
License
The MIT License (MIT). Please see License File for more information.