4

我想使用 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');
});

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

我也试过这样:

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

这也不会抛出任何错误,但不会改变任何东西。

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

4

2 回答 2

7

aww,这很容易:只需直接在事件中调用它..

// $event instanceof \Zend\Mvc\MvcEvent
$event->getViewModel()->setTemplate('layout/example');
于 2012-08-28T12:14:39.477 回答
2
//$this instanceof Zend\Mvc\Controller\AbstractActionController
$this->layout('layout/example');
于 2012-11-05T01:09:25.603 回答