zend框架2根据请求触发单个模块上的事件(不是发送)

时间:2013-09-20 14:14:16

标签: php zend-framework

我的应用程序有多个模块,其中包括2个CMS模块和一个前端模块。我想在所有操作的CMS模块上触发身份验证方法。我希望在前端控制器插件(ZF1 refference)和我看到它应该在模块的Module.php中的方式中执行此操作,但是此处的所有内容都会在发送时在整个应用程序中触发。

1 个答案:

答案 0 :(得分:0)

虽然您的事件处理程序会影响所有模块,但您可以按名称空间过滤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
 }
}