我想使用 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');
这也不会抛出任何错误,但不会改变任何东西。
如何在运行时从控制器外部切换布局?