我想使用 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 内部更改布局,但不能使用 $controller->layout() 从外部更改布局?

我也这样试过:
// $event instanceof \Zend\Mvc\MvcEvent
$serviceManager = $event->getApplication()->getServiceManager();
$renderingStrategy = $serviceManager->get('DefaultRenderingStrategy');
$renderingStrategy->setLayoutTemplate('layout/example');

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

如何在运行时从 Controller 外部切换布局?

最佳答案

哇,太简单了:直接在事件上调用它..

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

关于php - Zend 框架 2 : Set Layout using MvcEvent,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12158802/

10-17 01:15