laravel-enhanced-pipeline

Laravel Pipeline with DB transaction support, events and additional methods

MIT License

Downloads
12.9K
Stars
53
Committers
1

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

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.