检测当前页面zf2

时间:2014-08-16 12:25:22

标签: php zend-framework2

我需要在主要布局中知道,如果当前页面像“模块/控制器”。 所以,例如,如果我在“site.com/module/controller”这样的页面上,“www / module / application / view / layout / layout.phtml”中的布局必须明白我在页。

请告诉我,如何应对?

谢谢。

1 个答案:

答案 0 :(得分:0)

可能的解决方案是将路线参数设置为Module.php的布局变量。

假设您的路由配置如下所示:

'route'    => '/[:module[/:controller[/:action]]]

您可以使用以下代码:

Module.php文件中

public function onBootstrap($e)
{
    //....
    $eventManager        = $e->getApplication()->getEventManager();
    $eventManager->attach('dispatch', array($this, 'initView' ));
   //....
}

public function initView(MvcEvent $e)
{
    $controller = $e->getTarget();
    $route = $controller->getEvent()->getRouteMatch();

    //set variables into the layout
    $controller->layout()->modulename = $route->getParam('module');
    $controller->layout()->controllername = $route->getParam('controller');
    $controller->layout()->actionname= $route->getParam('action');
}

注意:如果您在路线参数中没有module,则可以按以下方式获取:

    $controllerClass = get_class($controller);
    $moduleName = substr($controllerClass, 0, strpos($controllerClass, '\\'));

    $controller->layout()->modulename = $moduleName;

在您的布局中:

现在您可以像这样访问布局中的变量:

Current page :<?php echo $this->modulename.'/'.$this->controllername.'/'.$this->actionname; ?>

示例:

Page:site.com/application/index/home

输出:Current page : Application/index/home