Php 在Zend Framework 2中获取用于导航的活动模块
我正在使用框架Zend Framework 2构建我的应用程序 我想修改layout.phtml中的当前导航栏,将2个链接显示为标准链接,然后根据用户权限显示更多链接Php 在Zend Framework 2中获取用于导航的活动模块,php,zend-framework2,zend-navigation,Php,Zend Framework2,Zend Navigation,我正在使用框架Zend Framework 2构建我的应用程序 我想修改layout.phtml中的当前导航栏,将2个链接显示为标准链接,然后根据用户权限显示更多链接 如何使正在使用的活动模块(/user for ZfcUser)显示为li class=“active”,以及如何根据加载的模块实现导航项?在controller中,您可以获得如下活动模块: $modules = $this->getEvent()->getApplication()->getServiceMana
如何使正在使用的活动模块(/user for ZfcUser)显示为li class=“active”,以及如何根据加载的模块实现导航项?在controller中,您可以获得如下活动模块:
$modules = $this->getEvent()->getApplication()->getServiceManager()->get('modulemanager')->getLoadedModules();
$moduleNames = array_keys($modules);
然后,您可以检查按模块名称加载的模块:
$moduleLoaded = in_array('ZfcUser', $moduleNames); //true or false
问题是。。。你对“活动模块”的定义是什么?在ZF2中,模块是由顶级名称空间松散定义的,但即使这样也不是绝对的,因为如果模块愿意,它们可以在多个名称空间下提供代码 我写了一篇关于配置特定于模块的布局的博文,在这里我更详细地解释了这个问题,并演示了一个基于活动模块执行操作的可能“解决方案”: 在该示例中,我使用事件标识符附加到“dispatch”事件,该事件标识符是模块名(名称空间),它仅针对被调度控制器的顶级名称空间触发(我专门将此功能添加到ZF2中,因为它在测试期间已成为一个常见问题)。如果您想知道这是如何工作的或为什么工作的,请参阅(特别是撰写本文时的第158行) 或者,您可以附加到分派事件,并获取正在分派的控制器的顶级命名空间。同样,也不能保证这就是您要查找的“模块名”,在调度请求时,最好只考虑控制器和操作,而不是“这是哪个模块?”
在控制器中,您可以通过这种方式检查活动模块
$bIsModule = (bool) $this->getEvent()
->getApplication()
->getServiceManager()
->get('modulemanager')
->getModule('ZfcUser'); // returns true or false
$bIsModule = (bool) $this->getEvent()
->getApplication()
->getServiceManager()
->get('modulemanager')
->getModule('ZfcUser'); // returns true or false