Изменение макета в контроллере Zend Framework 2.0

Я изучаю бета-версию ZF2.0 . В ZF1 мы можем менять макет на лету в контроллере:

Zend_Layout::getMvcInstance()->setLayout('layoutname'); 

Но в ZF2.0 класс Zend \ Layout не имеет метода getMvcInstance (). Я думаю, что это можно сделать с помощью инъекций зависимостей, но не уверен.

ZF2 находится в стадии разработки, и никакая гарантия не может быть сделана так, как она работает сейчас, так будет работать, когда ZF2 достигнет стабильного состояния.

Однако новый слой из Zend \ Mvc недавно объединен, поэтому вы сможете сделать это сейчас (с текущим мастером):

 public function somethingAction () { // Do some intelligent work $this->layout('layout/different'); } 

Лучший способ, которым я нашел установку шаблонов в действиях, – это

 public function someAction() { $viewModel = new ViewModel(); $viewModel->setTemplate('layout/custom'); return $viewModel; } 

В module.config.php убедитесь, что вы установили соответствующий template_map .

  'view_manager' => array( 'template_map' => array( 'layout/custom' => __DIR__ . '/../view/layout/custom.phtml' ), ), 
 public function someAction() { $layout = $this->layout(); $layout->setTemplate('layout/custom'); $viewModel = new ViewModel(); return $viewModel; } 

Вам также нужно будет установить макет либо в бутстрап, либо при использовании di. Пример Di:

  'Zend\View\Resolver\TemplateMapResolver' => array( 'parameters' => array( 'map' => array( 'layout/different' => __DIR__ . '/../view/layout/different.phtml', ), ), ), 

Я пробовал вышеуказанные советы.

 public function somethingAction () { // Do some intelligent work $this->layout('layout/different'); } 

Я получил правильный результат с этим фрагментом.

 public function someAction() { $viewModel = new ViewModel(); $viewModel->setTemplate('layout/custom'); return $viewModel; } 

Он отобрал оба макета (модуль по умолчанию и текущий).