phly / phly-event-emitter
Requires
- php: ^7.1
- fig/event-dispatcher-util: ^0.6.1
- psr/event-dispatcher-message: ^0.6
- psr/event-dispatcher-task: ^0.6
- zendframework/zend-stdlib: ^3.2
Requires (Dev)
- phpunit/phpunit: ^7.1.1
- zendframework/zend-coding-standard: ~1.0.0
This package is auto-updated.
Last update: 2019-04-24 13:47:31 UTC
README
实验性!
这个库是实验性的,跟踪PSR-14所提出的不同迭代和实验。在API方面非常不稳定;请自行承担风险使用。
此库实现了以下提出的PSR-14接口
-
ListenerProvider
实现了ListenerProviderInterface
,并允许您将监听器附加到任何消息类型。然后它作为生成器,遍历每个监听器并测试它是否处理消息类型。 -
PrioritizedListenerProvider
也实现了ListenerProviderInterface
,并允许您将具有整数优先级的监听器附加到任何消息类型。在检索监听器时,它遍历所有附加的监听器,并将能够监听发出的消息的监听器注入到优先队列中,然后返回。 -
MessageNotifier
实现了MessageNotifierInterface
,并将一个ListenerProviderInterface
传递给其构造函数。然后它遍历并通知为消息返回的监听器。如果有任何监听器抛出异常,它将捕获它们,并在通知所有监听器后,抛出一个Phly\EventEmitter\Exception\ExceptionAggregate
,它汇总了所有异常;通过调用该类中的getListenerExceptions()
方法来遍历它们。 -
TaskProcessor
实现了TaskProcessorInterface
,并将一个ListenerProviderInterface
传递给其构造函数。然后它遍历并处理为任务返回的监听器,如果任务可停止,则提前终止并指示传播已停止。不会捕获监听器抛出的异常。
它不提供以下接口的实现
EventInterface
(消费者将创建这些)MessageInterface
(消费者将创建这些)TaskInterface
(消费者将创建这些)StoppableTaskInterface
(消费者将创建这些)
安装
首先需要将仓库条目添加到您的composer.json
文件中
"repositories": [ { "type": "vcs", "url": "https://github.com/phly/phly-event-emitter.git" } ],
然后,运行以下命令安装此库
$ composer require phly/phly-event-emitter
文档
基本用法
以下演示了使用ListenerProvider
附加监听器。然后使用提供程序来初始化MessageNotifier
或TaskProcessor
。
use Phly\EventEmitter\MessageNotifier; use Phly\EventEmitter\ListenerProvider; $listeners = new ListenerProvider(); $listeners->on(BootstrapEvent::class, function ($e) { // do something with the bootstrap event }); $notifier = new MessageNotifier($listeners); $notifier->notify(new BootstrapEvent($params));
优先级监听器
以下示例使用PrioritizedListenerProvider
提供三个不同优先级的三个不同监听器。优先级是整数;优先级越高,执行越早,而优先级较低(包括负优先级)的执行较晚。
use Phly\EventEmitter\TaskProcessor; use Phly\EventEmitter\PrioritizedListenerProvider; $listeners = new PrioritizedListenerProvider(); $listeners->on(BootstrapTask::class, function ($e) { echo 1, PHP_EOL; }, -100); $listeners->on(BootstrapTask::class, function ($e) { echo 2, PHP_EOL; }, 100); $listeners->on(BootstrapTask::class, function ($e) { echo 3, PHP_EOL; }, 1); $processor = new TaskProcessor($listeners); $processor->process(new BootstrapTask($params));
在上面的示例中,输出将变为
2
3
1