我的应用程序有多个模块,其中包括 2 个 CMS 模块和一个前端模块。我只想在所有操作的 CMS 模块上触发身份验证方法。我想在前端控制器插件(ZF1 引用)之类的东西中执行此操作,并且我认为它应该在模块的 Module.php 中,但是这里的所有内容都会在调度时在整个应用程序中触发。
问问题
272 次
1 回答
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
}
}
于 2013-09-20T14:44:08.663 回答