alexmanno / pipeline-remix
Reinvented pipelines for PHP
Requires
- php: ^7.1
- psr/http-message: ^1.0
Requires (Dev)
- facile-it/facile-coding-standard: ^0.1.0
- facile-it/paraunit: ^0.10.1
- phpspec/prophecy: ^1.7
This package is auto-updated.
Last update: 2024-10-22 21:44:48 UTC
README
Reinvented pipelines for PHP
What's a Pipeline
A pipeline is a set of data processing elements connected in series, where the output of one element is the input of the next one.
Installation
From Composer
To use this package, use Composer:
- from CLI:
composer require alexmanno/pipeline-remix
- or, directly in your
composer.json
:
{ "require": { "alexmanno/pipeline-remix": "dev-master" } }
Architecture
Pipeline
A Pipeline is a simple SplQueue of Stage.
You can initialize it in this way: $pipeline = new AlexManno\Remix\Pipelines\Pipeline();
You can add Stage to Pipeline using $pipeline->pipe($stage)
Stage
A Stage is an object that implements AlexManno\Remix\Pipelines\Interfaces\StageInterface
and has an __invoke()
method.
This object is the smallest part of the pipeline and it should be a single operation.
You can create a class that implements that interface.
Ex.
class MyCoolStage implements AlexManno\Remix\Pipelines\Interfaces\StageInterface { /** * @param Payload $payload */ public function __invoke(Payload $payload) { $payload->setData('Hello!'); return $payload; } }
Payload
Payload is an object that implements PayloadInterface
and can store any kind of data.
For example in a web application it can store Request
and Response
.
Ex.
class Payload implements AlexManno\Remix\Pipelines\Interfaces\PayloadInterface { /** @var RequestInterface */ public $request; /** @var ResponseInterface */ public $response; }
Compose and run your pipeline
If you have already initialized Payload object and Stages objects you can compose your pipeline.
Ex.
// -- Initialized objects: $payload, $pipeline, $stage1, $stage2 -- $pipeline ->pipe($stage1) // Add $stage1 to queue ->pipe($stage2); // Add $stage2 to queue $pipeline($payload); // Run pipeline: invoke $stage1 and then $stage2 with payload from $stage1
You can also compose two or more pipelines together using method add()
Ex.
// -- Initialized objects: $payload, $pipeline1, $pipeline2, $stage1, $stage2 -- $pipeline1->pipe($stage1); // Add $stage1 to $pipeline1 $pipeline2->pipe($stage2); // Add $stage2 to $pipeline2 $pipeline1->add($pipeline2); // Add stages from $pipeline2 $payload = $pipeline1($payload); // Run pipeline: invoke $stage1 (from $pipeline1) and then $stage2 (from $pipeline2) with payload from $stage1
Examples
- Using Classes Example-00
Conclusion
I hope you found useful this repo. Thanks for attention.
Made with ❤️ by @alexmanno