phly/phly-event-emitter

此包已被废弃且不再维护。作者建议使用phly/phly-event-dispatcher包代替。

PSR-14事件发射器

0.1.0 2018-11-14 22:48 UTC

This package is auto-updated.

Last update: 2019-04-24 13:47:31 UTC


README

Build Status Coverage Status

实验性!

这个库是实验性的,跟踪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附加监听器。然后使用提供程序来初始化MessageNotifierTaskProcessor

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

支持