Подтвердить что ты не робот

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

Я изучаю ZF2.0 beta​​strong > . В ZF1 мы можем изменить компоновку "на лету" в контроллере:

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

Лучший способ, который я нашел для установки шаблонов в действиях, выглядит следующим образом:

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'
    ),
),

Ответ 3

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

Ответ 4

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

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

Ответ 5

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

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

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

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

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

    return $viewModel;
}

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