我有以下设置:在控制器中,我触发了一个事件,我想在其他地方将多个侦听器附加到它。
目前我的onBootstrap中有以下监听器:
$e->getApplication()->getServiceManager()->get('EventManager')->attach('*', function($e) {
var_dump($e->getName());
});
以下代码作为工厂:
'Application\Controller\Foo' => function(ControllerManager $cm) {
$eventManager = $cm->getServiceLocator()->get('EventManager');
$controller = new \Application\Controller\FooController();
$controller->setEventManager($eventManager);
return $controller;
},
最后是我的控制器中的以下触发器:
$this->getEventManager()->trigger('foo-finished', 'finishedAction', array(
'obj' => $foo->someObject()
));
所以它应该EventManager
和我从服务定位器接收它并将它注入控制器一样。我仍然没有得到任何输出。我也尝试$e->getApplication()->getEventManager()
在附加到事件时使用,但这只会给我 ZF 内部事件。
我读到了SharedEventManager
,但我不完全理解为什么我应该传递一个上下文。我像这样尝试过(据我所知),但仍然没有输出。
$e->getApplication()->getServiceManager()->get('EventManager')
->getSharedManager()
->attach('finishedAction', '*', function() { ... });
那么,我做错了什么?我只想触发事件并在可能不同的模块中捕获它们,但它似乎变得如此复杂......