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.
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');
}
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'
),
),
public function someAction() {
$layout = $this->layout();
$layout->setTemplate('layout/custom');
$viewModel = new ViewModel();
return $viewModel;
}
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).
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',
),
),
),