A free and open-source book on ZF3 for beginners

Translation into this language is not yet finished. You can help this project by translating the chapters and contributing your changes.

6.4. Switcher entre les layouts

Par défaut, ZF3 vous fournit un modèle de layout : layout.phtml. Dans la vie réelle, vous devrez probablement avoir plusieurs layout et en changer pour certains controller/action.

Par exemple, vous pouvez avoir une partie front-end et une partie administration dans votre site. La partie front-end consisterait en des pages web visibles pour tous les utilisateurs et utiliserait le layout par défaut pour toutes ces pages. La partie administration consisterait en des pages visibles uniquement par administrateur et utiliserait un autre template de layout contenant le menu administration.

Commencez par créer un autre fichier de template layout. Par exemple, appelez-le layout2.phtml. Pour simplifier la création du fichier, copiez le contenu du fichier layout.phtml par défaut et apportez les modifications nécessaires.

Lorsque le deuxième modèle de layout est prêt, vous pouvez basculer entre les mises en page pour l'action d'un contrôleur en utilisant le code suivant :

When the second layout template is ready, you can switch between layouts for a particular controller's action by using the following code:

// La méthode d'action d'un contrôleur qui utilise un
// layout alternatif.
public function indexAction() 
{
  //...

  // Utiliser le plugin Layout pour accéder à l'objet ViewModel
  // associé au modèle de layout.
  $this->layout()->setTemplate('layout/layout2');
  
  //...
}

Dans l'exemple de méthode d'action ci-dessus, nous utilisons le plugin de contrôleur Layout (ligne 9) qui permet d'accéder à l'instance de la classe ViewModel associée au modèle de layout. Pour modifier le modèle de layout associé à cette action, nous avons appelé la méthode setTemplate() fournie par la classe ViewModel.

En plus du plugin de controller Layout, il y a l'aide de vue Layout qui fournit les mêmes fonctionnalités. Avec l'aide de vue Layout, vous pouvez, par exemple, changer de layout depuis une page "statique" qui n'a pas d'action de contrôleur dédiée.

6.4.1. Définir un layout pour toutes les actions d'un contrôleur

Si toutes les méthodes d'action d'une classe de contrôleur doivent utiliser le même layout alternatif, vous pouvez rappeler la méthode onDispatch() de la classe AbstractActionController et y définir un template avec la méthode setTemplate(), comme indiqué dans l'exemple ci-dessous :

// Ajoute l'alias au début du contrôleur
use Zend\Mvc\MvcEvent;

// ...

class IndexController extends AbstractActionController 
{
  /** 
   * On remplace la méthode onDispatch() de la classe parente pour
   * définir un autre layout pour toutes les actions de ce contrôleur.
   */
  public function onDispatch(MvcEvent $e) 
  {
    // Appelle d'abord la classe onDispatch() et récupère la réponse
    $response = parent::onDispatch($e);        
	
    // Définit un layout alternatif
    $this->layout()->setTemplate('layout/layout2');                
	
    // Rentourne la réponse
    return $response;
  }
}

Top