1
是否可以按名稱前綴來偵聽所有事件?使用Symfony EventDispatcher按事件名稱前綴訂閱事件
例如,我們有事件kernel.componentName.eventName
我可以聽前綴kernel.componentName.*
或類似的東西,任何事件?
是否可以按名稱前綴來偵聽所有事件?使用Symfony EventDispatcher按事件名稱前綴訂閱事件
例如,我們有事件kernel.componentName.eventName
我可以聽前綴kernel.componentName.*
或類似的東西,任何事件?
你可以用多種方式做到這一點。其中之一就是不帶任何參數地致電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);
}
}