在dispatch事件上访问ViewModel变量

时间:2012-09-25 17:41:20

标签: php zend-framework2

这是一个ZF2问题。

我正在尝试更改我的模板,具体取决于我的控制器上设置的变量(因为我要决定使用哪个模板)。 在我的模块onBooststrap中我有:

$this->eventManager->attach('dispatch', function($e)
    {
        if (0 === strpos($e->getRouteMatch()->getParam('controller'), __NAMESPACE__, 0))
        {
            $e->getViewModel()->setTemplate('layout');
        }

    }, -100);

并在我的控制器中:

class IndexController extends AbstractActionController
{
    public function indexAction ()
    {
        $view = new \Zend\View\Model\ViewModel();
        $view->setVariable("layout", "layout");
        return $view;
    }
}

但是,如何访问该视图变量“layout”,所以我可以在setTemplate上的dispatch事件中更改它?

1 个答案:

答案 0 :(得分:2)

查看onDispatch方法和MvcEvent类似乎有getResult()方法,这可能包含控制器操作的结果。

否则你看过布局控制器插件了吗?这个插件可以让你改变模板:

$this->layout('new layout');

当然,这需要在控制器内,并且很可能需要将模板添加到模板图中。