【发布时间】:2016-12-27 15:50:44
【问题描述】:
是否可以通过名称前缀监听所有事件?
例如我们有事件kernel.componentName.eventName
我可以收听带有前缀kernel.componentName.* 或类似名称的任何事件吗?
【问题讨论】:
标签: php event-handling symfony
是否可以通过名称前缀监听所有事件?
例如我们有事件kernel.componentName.eventName
我可以收听带有前缀kernel.componentName.* 或类似名称的任何事件吗?
【问题讨论】:
标签: php event-handling symfony
您可以通过多种方式做到这一点。其中之一是不带任何参数地调用EventDispatcher#getListeners,获取所有以kernel.componentName.开头的事件名称列表,并一一订阅。
我认为更简单的方法是扩展EventDispatcher。
use Symfony\Component\EventDispatcher\EventDispatcher;
use Symfony\Component\EventDispatcher\Event;
class MyEventDispatcher extends EventDispatcher
{
protected function doDispatch($listeners, $eventName, Event $event)
{
// add logic here
if (strpos($eventName, 'kernel.componentName.') === 0) {
// do something, like call another listener or a callback
}
parent::doDispatch($listeners, $eventName, $event);
}
}
【讨论】: