Изменить макет в контроллере Zend Framework 2.0 - PullRequest
26 голосов
/ 02 февраля 2012

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

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

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

Ответы [ 5 ]

58 голосов
/ 23 февраля 2012

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

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

public function somethingAction () 
{
    // Do some intelligent work

    $this->layout('layout/different');
}
8 голосов
/ 02 декабря 2012

Лучший способ установить шаблоны в действиях - это

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'
    ),
),
7 голосов
/ 05 августа 2013
public function someAction() {
    $layout = $this->layout();
    $layout->setTemplate('layout/custom');
    $viewModel = new ViewModel();
    return $viewModel;
}
3 голосов
/ 02 января 2013

Я попробовал приведенные выше советы.

public function somethingAction () 
{
    // Do some intelligent work

    $this->layout('layout/different');
}

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

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

    return $viewModel;
}

Он извлек обе схемы (по умолчанию и текущий модуль).

3 голосов
/ 27 апреля 2012

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

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