Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在Zend Framework 2中获取用于导航的活动模块_Php_Zend Framework2_Zend Navigation - Fatal编程技术网

Php 在Zend Framework 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

我正在使用框架Zend Framework 2构建我的应用程序

我想修改layout.phtml中的当前导航栏,将2个链接显示为标准链接,然后根据用户权限显示更多链接


如何使正在使用的活动模块(/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