Bdf Pipeline component

v1.1.1 2018-03-22 15:34 UTC

This package is auto-updated.

Last update: 2024-04-14 03:06:47 UTC


A PHP Pipeline pattern.

Build Status Scrutinizer Code Quality Packagist Version Total Downloads

Install via composer

$ composer require b2pweb/bdf-pipeline

Usage Instructions

A basic and classic use of pipeline with a pipe processor.

use Bdf\Pipeline\Pipeline;
use Bdf\Pipeline\CallableFactory\LinkedCallableFactory;

$pipeline = new Pipeline(new LinkedCallableFactory());
$pipeline->pipe(function($value) {
    return $value + 2;

// Returns 12

The pipeline lib comes with an advanced processor (used by default).

use Bdf\Pipeline\Pipeline;
use Bdf\Pipeline\CallableFactory\StackCallableFactory;

$pipeline = new Pipeline(new StackCallableFactory());
$pipeline->pipe(function($next, $foo, $bar) {
    // Do something
    $result = $next($foo, $bar);
    // Do something else
    return $result;
$pipeline->outlet(function($foo, $bar) {
    return "${foo}.${bar}";
// Manage multiple parameters
echo $pipeline->send('foo', 'bar'); // Print foo.bar

Ok, So ?

You can use this package as a classic pipe, but it was designed to be easily extended:

$pipeline->pipe(new LogCommand());
$pipeline->outlet(new CreateUserHandler());


$pipeline->prepend(new TransactionnalCommand());
$pipeline->send(new CreateUserCommand());
class TransactionnalCommand
    public function __invoke($next, $command)
        try {
            $result = $next($command);
            // Commit and return the result
            return $result;
        } catch (\Throwable $exception) {
            // Rollback and propagate exception
            throw $exception;

The pipeline is reusable:

$pipeline = new Pipeline();
$pipeline->pipe(new Double());

$new = clone $pipeline;

$new->pipe(new Double());

echo $pipeline->send(2); // 4
echo $new->send(2); // 8


Distributed under the terms of the MIT license.