Zend Framework 2 根据请求(不是在调度时)在单个模块上触发事件


zend framework 2 trigger event on a single module upon request (not on dispatch)

我的应用程序有多个模块,其中包括 2 个 CMS 模块和一个前端模块。我只想在所有操作的 CMS 模块上触发身份验证方法。我想在诸如前端控制器插件(ZF1 引用)之类的东西中执行此操作,并且我认为它应该在模块中.php的原因中,但这里的所有内容都会在整个应用程序中触发调度。

尽管事件处理程序会影响所有模块,但您可以按命名空间筛选 CMS 模块。例如,如果 CMS 模块中的所有控制器都命名为"CMSModule''Controller''IndexController",则可以测试命名空间是否为 CMSModule 并执行身份验证,如下例所示:

class Module {
 public function onBootstrap('Zend'Mvc'MvcEvent $e){
   // ...
   $em = $e->getApplication()->getEventManager();
   $em->attach('Zend'Mvc'MvcEvent::EVENT_DISPATCH, array($this, 'onDispatch'));
 }
 public function onDispatch('Zend'Mvc'MvcEvent $e){
   $match = $e->getRouteMatch();
   $controller = $match->getParam('controller');
   $segments = explode('''', $controller);   
   $namespace = array_shift($segments);
   if(!$namespace=='CMSModule1' && !$namespace=='CMSModule2' && ...) 
      return;
   // Check the identity here
 }
}