enl / deferred-dispatcher
这是一个针对 Symfony EventDispatcher 的扩展,它为事件的处理提供了延迟执行的方式。
v1.0.2
2016-11-04 06:27 UTC
Requires
- php: ~5.6 || ~7.0
- symfony/event-dispatcher: ~2.7 || ~3.0
Requires (Dev)
- phpunit/phpunit: ~4.8
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']);