Я изучаю бета-версию 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; }
Он отобрал оба макета (модуль по умолчанию и текущий).