ZF2:获取应用程序布局中的模块名(或路由),用于菜单高亮



如何在ZF2中获得当前(选定)模块名称在应用程序布局?目的:我的应用程序布局包括zf2应用程序的主菜单,每次选择一个模块时,我需要突出显示该模块的菜单语音。此外,我需要设置正确的路由(url,动作),当菜单与此为。每个模块都有一个菜单语音:

<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_MODULE_NAME变量(就像在问题本身中所做的那样)。如果需要,可以使用上面代码中提到的其他变量。

我更喜欢不处理Module.php的简单方法

将此代码放入layout.phtml

$routeName = $this->getHelperPluginManager()->getServiceLocator()->get('Application')
               ->getMvcEvent()->getRouteMatch()->getMatchedRouteName();
if($routeName === "users") ...

使用array_shift代替array_pop (Kunal Dethe answer):

$controller = $this->getParam('controller');
$module_array = explode('\', $controller);
$module = array_shift($module_array);

最新更新