enl/deferred-dispatcher

这是一个针对 Symfony EventDispatcher 的扩展,它为事件的处理提供了延迟执行的方式。

v1.0.2 2016-11-04 06:27 UTC

This package is auto-updated.

Last update: 2024-08-29 04:42:55 UTC


README

本包扩展了Symfony Event Dispatcher,并添加了将一组事件延迟处理到请求执行后期执行的机会。

引导代码

$eventsToDefer = ['event-to-defer', 'another-event'];
$dispatcher = new DeferredEventDispatcher();
$dispatcher->addSubscriber(new DeferredSubscriber($eventsToDefer));

当你从列表中分发事件时,它将被DeferredSubscriber拦截并存储起来以便稍后执行。这样,在你完成所有必要的操作之后,你可以通过触发特殊事件来重新播放这些事件。

$dispatcher->dispatch(Events::PLAY_DEFERRED);

DeferredSubscriber订阅到另一个事件

通过触发Events::PLAY_DEFERRED来播放延迟事件的想法可能并不那么好,因为它将你的代码库(而不是配置)绑定到这个分发器上。

因此,还有另一种选择

$subscriber = new DeferredSubscriber($eventsList);
$dispatcher->addSubscriber($subscriber);
$dispatcher->addListener('kernel.terminate', [$subscriber, 'playDeferred']);