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

とても簡単でした。イベントで直接呼び出すだけです..

// $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 に答える