pixaye/pipeliner

简单的管道提供者

v1.0 2019-10-28 11:56 UTC

This package is auto-updated.

Last update: 2024-09-29 05:42:31 UTC


README

codecov

Logo

Pipeliner 是一个简单的管道实现,它允许您将应用程序中的任何大动作分解成小而可替换的部分,这样您就可以在运行时更改此动作中的某些行为。这使得您的应用程序易于测试,便于发现错误/识别问题区域,并使其非常灵活。

要开始使用 pipeliner,只需运行 composer 命令

composer require mkgor/pipeliner

用法

$pipeline = new Pipeliner\Pipeline();

$pipeline->pipe(new ExampleMiddleware());
         ->pipe(new SecondExampleMiddleware());
         ->exec();

让我们看看中间件类包含什么

<?php

use Pipeliner\Middleware\AbstractMiddleware;

/**
 * Class ExampleMiddleware
 */
class ExampleMiddleware extends AbstractMiddleware
{
    /**
     * Doing dome stuff and returns result or null, if it is making some action and don't returns something;
     */
    public function handle()
    {
        echo 'First middleware has done some stuff';
    }
}

您可以为 next() 方法指定哪个类将在链中接下来被调用。如果没有调用,则会抛出异常

public function next() : ?string
{
    return 'SecondExampleMiddleware';
}

您可以创建自己的中间件类型。只需创建一个新的类,它扩展了 AbstractMiddleware,这样就完成了!目前,pipeliner 有一个额外的中间件类称为 ClosureMiddleware。它允许您在链中使用闭包。

$pipeline = new Pipeliner\Pipeline();

$pipeline->pipe(new ExampleMiddleware())
         ->pipe(new SecondExampleMiddleware())
         ->pipe(new ClosureMiddleware('SomeActionName', function(){
              return 'I am clousure';
         }, 'FourthMiddleware'))
         ->pipe(new FourthMiddleware())
         ->exec();

每个中间件类都有一个私有的 $bag 变量,它包含 BagInterface 的实例(目前是 RuntimeBag,但您也可以创建自己的,例如,您可以在数据库或文件中包含数据)。

它包含来自先前中间件的所有结果,并提供四个方法来获取/设置这些数据。

$this->bag->put('NameOfMiddleware', $data);
$this->bag->get('NameOfMiddleware');
$this->bag->getLast();
$this->bag->getAll();

您可以设置自己的 bag,只需创建一个实现 BagInterface 的实例即可!

$pipeliner = new Pipeliner\Pipeline();
$pipeliner->setPipelineBag(new YourOwnBagClass());
...