web-dev-qa-db-fra.com

Changer la disposition dans le contrôleur de Zend Framework 2.0

J'apprends ZF2.0 beta. Dans ZF1, nous pouvons changer la disposition à la volée dans le contrôleur:

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

Mais dans ZF2. la classe Zend\Layout n'a pas la méthode getMvcInstance (). Je pense que cela peut être fait en utilisant des injections de dépendance mais pas sûr.

26
Alex Pliutau

Le ZF2 est en cours de développement et aucune garantie ne peut être donnée sur la façon dont il fonctionne maintenant, sera la façon dont il fonctionnera lorsque le ZF2 atteindra un état stable.

Cependant, la nouvelle couche de vue de Zend\Mvc a récemment été fusionnée, vous devriez donc pouvoir le faire maintenant (avec le maître actuel):

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

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

La meilleure façon que j'ai trouvée pour définir des modèles dans des actions est comme ceci

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

    return $viewModel;
}

Dans votre module.config.php Assurez-vous que vous avez défini votre chemin d'accès template_map Approprié.

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

J'ai essayé les conseils ci-dessus.

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

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

J'ai obtenu le résultat correct avec cet extrait.

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

    return $viewModel;
}

Il a récupéré les deux dispositions (module par défaut et actuel).

3
2plus

Vous devrez également définir la mise en page soit dans le bootstrap ou lors de l'utilisation de di. Di exemple:

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