2

目前,我使用 BaseController 的 onDispatch 方法设置了几个变量供应用程序的整体 layout.phtml 使用,我的所有其他控制器都扩展了该方法:

public function onDispatch(MvcEvent $e) 
{

    $config = $this->getServiceLocator()->get('config');
    $this->layout()->setVariable('platformName', $config['platform']['name']);
    $this->layout()->setVariable('platformYear', $config['platform']['year']);
}

这工作正常,直到我测试一些错误页面并发现这些页面没有提供变量,因为它没有使用基本控制器。

如何解决这个问题并为错误页面提供相同的变量?

4

2 回答 2

2

更改您正在收听的事件。

在这种情况下,我会将此逻辑移至应用程序引导事件或应用程序呈现事件(我尚未对此进行测试,但它可能会正常工作)。

一个例子,在你的 Module.php

public function onBootstrap($e)
{
    $config = $e->getApplication()->getServiceManager()->get('config');
    //$e->getViewModel()->setVariable();
}

尚未测试注释掉的行,但它应该让您朝着正确的方向前进。

编辑:找到一个使用渲染事件的例子

public function onBootstrap($e)
{
    $event = $e->getApplication()->getEventManager();

    $event->attach('render', function($e) {
        $config = $e->getApplication()->getServiceManager()->get('config');
        $e->getViewModel()->setVariable('test', 'test');
    });
} 
于 2013-09-13T00:40:50.987 回答
0

(死灵)

在 Controller 中使用onDispatch时,请记住将事件和所有内容返回给父级:

public function onDispatch(MvcEvent $e)
{
    // Your code
    return parent::onDispatch($e);
}

否则,该控制器中的操作逻辑将被忽略。

于 2015-02-11T14:53:25.717 回答