一个库,实现了以统一方式执行由各种模式(例如事件、管道、中间件等)使用的命令/可调用项的列表。
1.1.1
2023-12-24 19:32 UTC
Requires
- php: ^8.0|^8.1|^8.2
- psr/container: ^2.0
- psr/event-dispatcher: ^1.0
Requires (Dev)
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^9.6
Provides
README
Sirius Invokator 是一个库,实现了以统一方式执行由各种模式使用的命令/可调用项的列表。
- 中间件
- 管道
- 事件
- 命令总线(带中间件)
- 类似于WordPress的操作
- 类似于WordPress的过滤器
所有这些模式都有一个共同点,即它们实际上都是可调用项的列表,它们的不同之处在于它们以不同的方式执行。
在中间件的情况下,起始参数(例如:HTTP请求)从一个可调用项传递到下一个可调用项,每个可调用项都有选择以结果终止或调用列表中的下一个可调用项的选项。
在管道的情况下,每个可调用项的结果都传递给下一个可调用项,最后一个可调用项将返回管道的结果。
在事件的情况下,一个事件
对象通过列表中的每个可调用项传递,每个可调用项都是独立的。
在命令总线的案例中,一个命令
对象被发送给一个可调用项进行处理。
简要介绍
use Sirius\Invokator\Invoker; use Sirius\Invokator\Processors\PipelineProcessor; use Sirius\Invokator\CallableCollection; $container = app(); // your application DI container $invoker = new Invoker($container) $processor = new PipelineProcessor($invoker); $processor->add('pipeline_name', 'trim'); $processor->add('pipeline_name', 'Str::toUppercase'); $processor->add('pipeline_name', function($value) { // anonymous function return $value . '!!!'; }); $processor->add('pipeline_name', 'Logger@info'); $processor->process('pipeline_name', " hello world "); // returns `HELLO WORLD!!!`