我想使用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');
这也不会丢失任何错误,但不会改变任何错误。
如何在运行期间从控制器外部切换布局?
答案 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');