Zend framework ZF2:将全局变量添加到视图

Zend framework ZF2:将全局变量添加到视图,zend-framework,zend-framework2,Zend Framework,Zend Framework2,我正在努力学习ZF2,我需要了解一些基础知识。 我想做的是定义在所有模板中都可用的某些变量。 我有一个IndexController extendes BaseController,在BaseController中我尝试了以下方法: public function onDispatch( \Zend\Mvc\MvcEvent $e ){ $this->view->superImportantArray = array('data' => ...); } 当然,这是一种Z

我正在努力学习ZF2,我需要了解一些基础知识。 我想做的是定义在所有模板中都可用的某些变量。 我有一个IndexController extendes BaseController,在BaseController中我尝试了以下方法:

public function onDispatch( \Zend\Mvc\MvcEvent $e ){
  $this->view->superImportantArray = array('data' => ...); 
}

当然,这是一种ZF1方法,不起作用。那我该怎么做呢?如果有任何提示,我将不胜感激

尽可能避免使用自定义基本控制器。您可以使用事件系统来实现这一点。Put
使用Zend\Mvc\MvcEventModule.php
的顶部添加code>,然后添加:

public function onBootstrap(MvcEvent $e)
{
    $eventManager->attach(MvcEvent::EVENT_RENDER, function($e) {
        $layoutViewModel = $e->getViewModel();
        $childViewModels = $layoutViewModel->getChildren();
        if (count($childViewModels) == 0) {
            // probably an AJAX request
            return;
        }
        $viewModel = $childViewModels[0];

        $viewModel->superImportantArray = array('date' => ...);
    });
}

谢谢你的回答。两个问题:1。为什么我应该避免使用自定义基础控件?二,。在我的SuperImportarray中,我想存储用户登录数据-但我似乎无法在onBootstrap中访问$this->getServiceLocator。。。我该怎么做?在事件中使用
$e->getApplication()->getServiceManager()->get('xxx')
从服务管理器访问内容。自定义基本控制器不灵活且难以测试。它们有一些用例,但大多数事情都可以使用事件来完成。太棒了,这是有效的:$e->getApplication()->getServiceManager()->get('AuthService')->getIdentity();非常感谢你!