Module ZF2:在应用程序布局中获取模块名称(或路由)以突出显示菜单
如何在ZF2中获取应用程序布局中的当前(选定)模块名称? 用途:我的应用程序布局包括zf2应用程序的主菜单,每次选择模块时,我都需要突出显示模块的菜单声音。此外,我需要设置正确的路线(网址,行动)时,菜单是用这个为。 每个模块都有一个语音菜单:Module ZF2:在应用程序布局中获取模块名称(或路由)以突出显示菜单,module,zend-framework2,router,Module,Zend Framework2,Router,如何在ZF2中获取应用程序布局中的当前(选定)模块名称? 用途:我的应用程序布局包括zf2应用程序的主菜单,每次选择模块时,我都需要突出显示模块的菜单声音。此外,我需要设置正确的路线(网址,行动)时,菜单是用这个为。 每个模块都有一个语音菜单: <ul class="nav"> <?php foreach ($menu_modules as $mod): $is_active = ($mod['name'] == $CURRENT_MODULE_NAME)?'select
<ul class="nav">
<?php foreach ($menu_modules as $mod):
$is_active = ($mod['name'] == $CURRENT_MODULE_NAME)?'selected':'';//GET MODULE NAME
?>
<!-- class="active" -->
<li><a href="#" <?php echo $is_active;?> ><?php echo $mod['title']; ?></a></li>
<?php endforeach; ?>
<li><a href="<?php echo $this->url('login/process', array('action'=>'logout')); ?>"><?php echo $this->translate('Logout') ?></a></li>
</ul>
<div class="row-fluid" id="main_container">
<?php echo $this->content; ?>
</div>
我知道现在回答这个问题已经太晚了,而且已经有很多答案了,但万一有人看到这个问题,可能会有所帮助
在主模块或任何模块的Module.php
中,编写以下代码-
class Module {
public function onBootstrap(MvcEvent $e) {
$sm = $e->getApplication()->getServiceManager();
$router = $sm->get('router');
$request = $sm->get('request');
$matchedRoute = $router->match($request);
$params = $matchedRoute->getParams();
$controller = $params['controller'];
$action = $params['action'];
$module_array = explode('\\', $controller);
$module = array_pop($module_array);
$route = $matchedRoute->getMatchedRouteName();
$e->getViewModel()->setVariables(
array(
'CURRENT_MODULE_NAME' => $module,
'CURRENT_CONTROLLER_NAME' => $controller,
'CURRENT_ACTION_NAME' => $action,
'CURRENT_ROUTE_NAME' => $route,
)
);
}
}
然后可以在布局文件中使用$CURRENT\u MODULE\u NAME
变量(如问题本身所述)。
如果需要,可以使用上述代码中提到的其余变量。我更喜欢不处理
Module.php的更简单的方法
将此代码放入布局。phtml
$routeName = $this->getHelperPluginManager()->getServiceLocator()->get('Application')
->getMvcEvent()->getRouteMatch()->getMatchedRouteName();
if($routeName === "users") ...
使用数组\u shift代替数组\u pop(Kunal Dethe答案):
但是,如果我们处于子过程中,这将不会返回currect模块名称。例如,它可以返回MODULENAME/default。这对我来说非常有效,根据Porta Tela Webbuilding的答案进行了修改
$controller = $this->getParam('controller');
$module_array = explode('\\', $controller);
$module = array_shift($module_array);