Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
Merci à vous de prendre sur votre temps.
voilà mon problème :
Est-il possible de récupérer le controller dans le bootstrap afin d'orienté vers le bon layout ?
Ayant lu précédemment dans un autre sujet qu'il n'était pas possible de récupérer le controller dans le bootstrap, j'aimerai en avoir la confirmation.
Ensuite, peut-être que ma logique n'est pas bonne et que je devrait peut être déterminé le layout approprié dans le init() de mon controller ?
Qu'en dites vous ?
Merci
Hors ligne
Dans le bootstrap ce n'est pas possible parce que le routage n'a pas encore été fait dans ZF ne sait pas quel controller il va servir.
Tu peux utiliser plutot un plugin de controller dans la méthode routeShutdown ou preDispatch (par exemple).
Si tu mets le code approprié dans le init() de ton controller ca marche aussi mais si tu risque de devoir repeter le meme code pour chaque controller qui aura besoin de changer le layout
Hors ligne
Merci, beaucoup, va pour un plugin alors !
Une autre petite chose, un détail.
Il y a deux type de bootstrap d'après se que j'ai pu voir :
- Celui du front_controller, avec dispatch en général sur l'index PHP.
- Celui du zend_application au quel on applique un fichier de config et qui appelle les classes bootstrap de l'application puis des modules, en passant la fonction bootstrap() puis run()
Y'a t-il une réelle différence entre les deux ?
Le quel utilisez-vous ? et pourquoi ?
Merci et bonne journée
Hors ligne
Pour moi il n'y a qu'un seul type de bootstrap c'est celui de Zend_Application.
Je ne vois pas ce que tu appel : "Celui du front_controller, avec dispatch en général sur l'index PHP"
Hors ligne
De tête c'est cette synthaxe
index.php
$application = Zend_Controller_Front::getInstance(); //tu fait le blabla de configuration $application->dispatch(); //et tu lance
Hors ligne
Salut,
Voici un passage de la documentation de ZF : http://framework.zend.com/manual/fr/zen … front.html
dispatch(Zend_Controller_Request_Abstract $request = null, Zend_Controller_Response_Abstract $response = null) fait le gros travail du contrôleur frontal. Il peut facultativement prendre un objet de requête et/ou un objet de réponse, permettant ainsi au développeur de fournir des objets personnalisés.
Si aucun objet de requête ou de réponse ne lui sont fournis, dispatch() vérifiera s'il existe des objets précédemment enregistrés et utilisera ceux-là ou des objets par défaut pour les utiliser dans son processus (dans les deux cas, le mode HTTP sera utilisé par défaut).
De la même manière, dispatch() vérifie s'il existe des objets routeur et distributeur inscrits, et instancie des versions par défaut si aucun n'est trouvé.
Le processus de distribution possède trois évènements
- le routage
- la distribution
- la réponse
Le routage a lieu exactement une fois, utilisant les valeurs de l'objet de requête quand dispatch() est appelé. La distribution a lieu dans une boucle ; une demande peut soit indiquer des actions multiples à distribuer, soit le contrôleur ou un plugin peuvent remettre à zéro l'objet de requête et ainsi forcer la distribution d'actions supplémentaires. Quand tout est réalisé, le contrôleur frontal retourne la réponse.
Pour résumer, le dispatch() du Front Controller sert à instancier et appeler ton contrôleur. Il en récupère ensuite la réponse
++
Hors ligne
ça commence à s'éclaircir, je vous remercie
Hors ligne
Moi je faisai un plugin comme ça sous 1.5 et je voudrai savoir si j'en ai encore besoin en MVC modulaire (Zend_Application) sous 1.11 ?
[lang=php] class setModularLayoutPlugin extends Zend_Controller_Plugin_Abstract { /** * Chargement de la configuration des layouts suivant le modules * appelé en surchargent la methode routeShutdown * * @name routeShutdown * @access public * @param object $request object request du front controlleur */ public function routeShutdown(Zend_Controller_Request_Abstract $request) { // on recupere le module cible de l'objet request $module = $request->getModuleName(); // on definit les options par defaut de layout pour le module appelé $layout_options = array( 'layout' => 'DefaultLayout', 'layoutPath' => 'application/modules/'.$module.'/layouts/', 'contentKey' => 'content' ); // on lance le MVC et on definit le typage $layout = Zend_Layout::startMvc($layout_options); $layout->getInflector()->setTarget(':script.:suffix') ->setStaticRule('suffix', 'phtml'); } }
Dernière modification par BeRoots (25-03-2012 22:00:41)
Hors ligne
Pages: 1