Zend Framework 2:使用MvcEvent设置布局

时间:2012-08-28 12:01:38

标签: php layout zend-framework2

我想使用mvc事件更改布局。我尝试了以下内容:

// $event instanceof \Zend\Mvc\MvcEvent
$serviceManager = $event->getApplication()->getServiceManager();
$controllerLoader = $serviceManager->get('ControllerLoader');
$controllerLoader->addInitializer(function ($controller) {

    $controller->layout('layout/example');
    // OR THIS
    $controller->getEvent()->getViewModel()->setTemplate('layout/example');
});

我的aproaches不会产生任何错误通知或其他东西。即使layout/example不存在也不行。为什么可以使用$this->layout()从控制器内部更改布局,但不能使用$controller->layout()从外部更改布局?

我也是这样试过的:

// $event instanceof \Zend\Mvc\MvcEvent
$serviceManager = $event->getApplication()->getServiceManager();
$renderingStrategy = $serviceManager->get('DefaultRenderingStrategy');
$renderingStrategy->setLayoutTemplate('layout/example');

这也不会丢失任何错误,但不会改变任何错误。

如何在运行期间从控制器外部切换布局?

2 个答案:

答案 0 :(得分:7)

aww,这很简单:只需直接在活动上调用它即可。

// $event instanceof \Zend\Mvc\MvcEvent
$event->getViewModel()->setTemplate('layout/example');

答案 1 :(得分:2)

//$this instanceof Zend\Mvc\Controller\AbstractActionController
$this->layout('layout/example');