smoothphp/eventdispatcher

Smooth Php Event Dispatcher

v5.0.0 2016-11-29 17:28 UTC

README

Smoothphps 事件调度器是另一个 PHP 事件调度器,使这个包与其他不同的地方在于它能够在运行时检测何时应该触发事件监听器。

在事件溯源中,你可能希望重新运行所有事件通过其处理程序,这很好,然而有一些处理程序你不想再次运行。这通常是生成新事件或与第三方通信的处理程序。否则,当你反复回放你的事件时,你会生成新的重复事件。通过实现投影接口可以避免这种情况。

use SmoothPhp\Contracts\EventDispatcher\Projection;
use SmoothPhp\EventDispatcher\ProjectEnabledDispatcher;

class MemberRegistered implements Event
{
    ...
}


final class ProjectionOnlyMemberMysqlListener implements Projection
{
    public function handleEvent(MemberRegistered $e)
    {
        db()->insert($e)
    }
}
final class NoneProjectionOnlyMemberThirdPartListener
{
    /** Do not run on reply */
    public function handleEvent(MemberRegistered $e)
    {
        curl()->send($e)
    }
}

$dispatcher = new ProjectEnabledDispatcher();


$dispatcher->addListener('MemberRegistered', [new ProjectionOnlyMemberMysqlListener, 'handleEvent']);
$dispatcher->addListener('MemberRegistered',[new ProjectEnabledDispatcher,'handleEvent']);

$dispatcher->dispatch('MemberRegistered', [],true);

在调用 dispatch 方法时,我们指定我们只想运行投影。这使我们能够在运行时进行更改。当为真时,事件调度器不会触发任何未实现 Projection 接口的事件监听器。