控制器中需要的module.php中的setvariable

时间:2014-01-29 11:34:44

标签: zend-framework zend-framework2 zend-view

我在module.php中设置了变量,我可以在布局中获得。 现在我也想在控制器中使用这个变量。

 public function onBootstrap(MvcEvent $e) {
    $eventManager = $e->getApplication()->getEventManager();
    $moduleRouteListener = new ModuleRouteListener();
    $moduleRouteListener->attach($eventManager);
  //  $this->initAcl($e);
     $e->attach(MvcEvent::EVENT_RENDER, array($this, 'setVariableToLayout'), 100);
}
public function setVariableToLayout(MvcEvent $event) {
    $viewModel = $event->getViewModel();
    $viewModel->setVariables(array(
        'controller' => $event->getRouteMatch()->getParam('controller'),
    ));
}

如何在我的所有控制器中获取该变量。 如果我试图在控制器中获取变量,如print_r($ controller)或print_r($ this-> controller),则会给出未定义的错误。

这是module.php文件,我已设置控制器作为请求控制器。,从onBootstrap调用的函数

1 个答案:

答案 0 :(得分:0)

我不明白视图中是否需要控制器名称。视图应该只关心正确渲染所需的参数;不是哪个控制器被派遣。

我假设你正在做某种条件视图逻辑if ($controller == 'foo')然后这应该大声喊叫你需要为每个'状态'使用不同的ViewModel。如果它们是共享视图脚本,那么请查看查看助手查看部分

用上述说法;我能看到的唯一错误是:

$e->attach(MvcEvent::EVENT_RENDER, ....

应该是:

$eventManager->attach(MvcEvent::EVENT_RENDER, ....

或许这是一个错字,但要澄清:

  • EventManager 管理对已注册事件侦听器的引用。
  • Event是一个容器,提供有关事件的元数据(在调用trigger()时将其注入事件监听器)