【发布时间】:2013-05-01 13:41:05
【问题描述】:
我有以下设置:在控制器中我触发了一个事件,我想在其他地方附加多个侦听器。
目前我的 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() { ... });
那么,我做错了什么?我只是想触发事件并在可能不同的模块中捕获它们,但它似乎变得如此复杂......
【问题讨论】:
-
查看答案示例 -> stackoverflow.com/questions/15227693/…
标签: php zend-framework2