Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Le sujet a déjà été abordé mais je ne trouve pas LA réponse.
Mon application est donc de type modulaire avec l'arborescence suivante :
application
---configs
------application.ini
---modules
------default
---------controllers
---------forms
---------models
---------views
---------layouts
---------Bootstrap.php
---Bootstrap.php
dans mon application.ini j'ai les 2 lignes suivantes :
resources.layout.layout = "main"
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"
Cela signifie donc que le fichier APPLICATION_PATH."/layouts/scripts/main.phtml sera appelé
Or je souhaite que ce soit le layout qui se trouve dans mon module qui soit appelé. J'ai alors tenté de modifier le Bootstrap du module pour qu'il reconfigure l'instance de Zend_Layout :
protected function _initLayout()
{
$layout = Zend_Layout::startMvc() ;
$layout->setLayoutPath( Zend_Controller_Front::getInstance()->getModuleDirectory() . '/layouts/scripts' ) ;
$layout->setLayout( 'toto' );
return $layout ;
}
Problème : ça ne marche pas du tout.
Pourquoi ? et bien il semble que lors de l'appel du Bootstrap du module, Zend_Layout ne soit pas encore instancié. Cela signifie donc que ma configuration est ensuite écrasée par le contenu du fichier application.ini
En effet si je dump l'instance de Zend_Layout depuis momn controller on voit bien le layoutPath et le layout de l'application.ini et non pas celui du Bootstrap du module.
Evidemment je pourrais remonter le répertoire layouts au niveau de l'application, mais cela ne ferais que reculer le problème : quand je vais avoir un second module qui devra utiliser un autre layout, comment faire cela sans avoir a modifier chaque Controller de ce module ?
Hors ligne
LA réponse à déjà été donnée : un plugin placé en preDispatch
Hors ligne
alors je vais chercher les infos sur ce preDispatch
Hors ligne
Un peu d'aide ici :
http://blog.astrumfutura.com/archives/4 … ators.html
Hors ligne
Hors ligne
Merci bcp
Hors ligne