php – 如何在多个类(和模块)上使用ZF2的EventManager?
发布时间:2020-12-13 17:16:24 所属栏目:PHP教程 来源:网络整理
导读:我有以下设置:在控制器中我触发一个事件,我想在其他地方附加多个监听器. 目前我的onBootstrap中有以下监听器: $e-getApplication()-getServiceManager()-get('EventManager')-attach('*',function($e) { var_dump($e-getName());}); 以下一段代码作为工厂
我有以下设置:在控制器中我触发一个事件,我想在其他地方附加多个监听器.
目前我的onBootstrap中有以下监听器: $e->getApplication()->getServiceManager()->get('EventManager')->attach('*',function($e) { var_dump($e->getName()); }); 以下一段代码作为工厂: 'ApplicationControllerFoo' => function(ControllerManager $cm) { $eventManager = $cm->getServiceLocator()->get('EventManager'); $controller = new ApplicationControllerFooController(); $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() { ... }); 那么,我做错了什么?我只想触发事件并在可能不同的模块中捕获它们,但它似乎变得如此复杂…… 解决方法
默认情况下,EventManager服务不是共享的,这意味着每次调用$serviceLocator-> get(‘EventManager’)都会得到一个不同的实例,这就是你应该使用SharedEventManager的原因 – 看看@Crisp的
link到看看如何使用它.
还有一个提示:不要尝试在对象中注入Mvc EventManager,每个对象都应该触发自己的事件. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |