babicaja / chainer
链式调用你的操作,使复杂的流程更易于阅读
v1.1.1
2021-11-08 14:39 UTC
Requires
- php: ^7.4|^8.0
Requires (Dev)
- nunomaduro/phpinsights: ^1.14|^2.0.0
- phpmd/phpmd: ^2.9
- phpunit/phpunit: ^9.4
- squizlabs/php_codesniffer: ^3.5
This package is auto-updated.
Last update: 2024-09-29 22:50:45 UTC
README
链式调用你的操作,使复杂的流程更易于阅读
安装
使用以下命令通过composer安装Chainer
composer require babicaja/chainer
使用
链式调用操作并通过简单的接口传递任何类型的负载
Chain::do(TaskOne::class) ->then(TaskTwo::class) ->then(TaskThree::class) ->run('payload');
传递给Chainer\Chain->then()
方法的操作可以是以下任何一种
链接实例
namespace Examples; use Chainer\Chain; use Chainer\Link; class FirstAction extends Link { public function handle($payload = null) { $payload[] = __METHOD__; return $payload; } } class SecondAction extends Link { public function handle($payload = null) { $payload[] = __METHOD__; return $payload; } } $result = Chain::do(FirstAction::class) ->then(SecondAction::class) ->run(); echo json_encode($result);
结果
[ "Examples\\FirstAction::handle", "Examples\\SecondAction::handle" ]
链实例
namespace Examples; use Chainer\Chain; use Chainer\Link; class FirstAction extends Link { public function handle($payload = null) { $payload[] = __METHOD__; return $payload; } } class SecondAction extends Link { public function handle($payload = null) { $payload[] = __METHOD__; return $payload; } } $chain = Chain::do(FirstAction::class) ->then(SecondAction::class); $result = Chain::do($chain) ->then(FirstAction::class) ->run([]); echo json_encode($result);
结果
[ "Examples\\FirstAction::handle", "Examples\\SecondAction::handle", "Examples\\FirstAction::handle" ]
可调用类
namespace Examples; use Chainer\Chain; class FirstAction { public function __invoke($payload = null) { $payload[] = __METHOD__; return $payload; } } class SecondAction { public function __invoke($payload = null) { $payload[] = __METHOD__; return $payload; } } $result = Chain::do(FirstAction::class) ->then(SecondAction::class) ->run(); echo json_encode($result);
结果
[ "Examples\\FirstAction::__invoke", "Examples\\SecondAction::__invoke" ]
回调/可调用
namespace Examples; use Chainer\Chain; function helper($payload) { $payload[] = __METHOD__; return $payload; } class Util { public function method($payload) { $payload[] = __METHOD__; return $payload; } public static function staticMethod($payload) { $payload[] = __METHOD__; return $payload; } } class App { public function run() { return Chain::do(fn($payload) => $this->method($payload)) ->then(fn($payload) => self::staticMethod($payload)) ->then([new Util(), 'method']) ->then([Util::class, 'staticMethod']) ->then('Examples\helper') ->then(function ($payload) { $payload[] = __METHOD__; return $payload; }) ->run([]); } private function method($payload) { $payload[] = __METHOD__; return $payload; } private static function staticMethod($payload) { $payload[] = __METHOD__; return $payload; } } $app = new App(); echo json_encode($app->run());
结果
[ "Examples\\App::method", "Examples\\App::staticMethod", "Examples\\Util::method", "Examples\\Util::staticMethod", "Examples\\helper", "Examples\\{closure}" ]
贡献
贡献者
欢迎您为该项目做出贡献。主要目标是保持其简单性,因为已经有足够多的具有高级功能的库。为了考虑您的工作,请按照以下指南创建一个Pull Request
## What's the purpose of this PR?
(Insert the description of the purpose of this change here)
## Impact Analysis
(What will this possibly affect?)
## Where should the tester start?
(Hints tips or tricks regarding how to test this, things to watch out for, etc)
## What are the relevant tickets?
(Is this related to a ticket/bug at the moment?)
别忘了编写单元测试!所有贡献者都将被列出。