pixaye / pipeliner
v1.0
2019-10-28 11:56 UTC
Requires (Dev)
- phpunit/phpunit: ^8.4
This package is auto-updated.
Last update: 2024-09-29 05:42:31 UTC
README
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()); ...