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

假如想象 提交于 2019-12-01 04:25:32

I know its too late to answer this question and also that there are a lot of answers available already but just in case someone views this question, it may be helpful.

In the primary or any Module's Module.php, write this -

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,
            )
        );
    }
}

Then you can use $CURRENT_MODULE_NAME variable in your layout file (as done in the question itself). The rest of the variables mentioned in the above code can be used if required.

I prefer easier way without dealing with Module.php

Place this code into layout.phtml

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

Use array_shift instead of array_pop (Kunal Dethe answer):

$controller = $this->getParam('controller');
$module_array = explode('\\', $controller);
$module = array_shift($module_array);
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!