ZF2:在应用程序布局菜单高亮获取模块名称(或航线)(ZF2: Get module name (o

2019-08-31 11:18发布

我怎样才能在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>

Answer 1:

我知道为时已晚来回答这个问题,也有很多可用的了,不过为了以防万一有人认为这一问题的答案,可能会有所帮助。

在小学或任何模块的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在布局文件变量(如问题本身完成的)。 在上面的代码中提到的变量的其余部分如果需要,可以使用。



Answer 2:

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

将此代码放置到layout.phtml

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


Answer 3:

使用array_shift代替array_pop(注:Kunal与Dethe答案)的:

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


文章来源: ZF2: Get module name (or route) in the application layout for menu highlight