Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour tout le monde,
je commence un nouveau projet sous zend framework et j'ai un petit problème de conception. Je voudrais automatiser le render des vues avec une méthode à laquelle on passe des vues et qui s'occupe de les afficher. J'utilise actuellement une classe qui s'occupe de ça mais qui n'est ni un controller, ni un plugin. Je voudrais quelque chose de plus MVC.
J'ai pensé à créer un controller "affichageController" qui gère l'affichage de toutes les vues. En gros, on passe les vues dans une de ses méthodes et il s'occupe du "$this->view->mavue".
Voici le code de ce controller:
class Affichage extends Zend_Controller_Action { public function __construct($options = null) { if( $options != null) { $this->setComponents($options); } } /** * On fait rentrer les vues à afficher dans le tableau des vues */ public function setComponents($options = null){ $req = $this->getRequest(); if (isset($_POST['email'])) $this->_parseOptions($options); if(!empty($this->optPageCentre)) { $this->aViews['pagecentre'] = $this->optPageCentre; } $this->_affichage(); } /** * On place la vue demandée en page centrale * */ private function _parseOptions($options) { if($options !== null && is_array($options)) { //Définition de la page centrale if(isset($options['pagecentre']) && is_file(APPLICATION_PATH.'/views/scripts/'.$options['pagecentre'])) { $this->optPageCentre = $options['pagecentre']; } } /** * On affiche les vues sélectionnées */ private function _affichage(){ if (is_array($this->aViews)){ foreach($this->aViews as $key => $value) { $this->view->$key = $value; } } } }
Ensuite j'instancie ce controller dans un controller et je lui passe une vue à afficher:
class IndexController extends Zend_Controller_Action { /** * Méthode de la page d'accueil */ public function accueilAction() { $oAffichage = new affichage(array('pagecentre' => 'index/index.phtml')); } }
Et là vous me dites: "ton constructeur 'affichage' il prend pas les bons arguments". Et vous avez raison. Mais alors comment, si c'est possible et que ça a du sens, instancier un controller dans un controller?
Hors ligne
Regarde ces deux post peut être y trouvera tu des solutions :
http://www.z-f.fr/forum/viewtopic.php?id=6339
http://www.z-f.fr/forum/viewtopic.php?id=6392
Pour ma part j'utiliserais un contrôleur (afficheur) avec des actions qui se chargerais de la récupération des paramètres et que j'appellerais dans ta fonction accueil :
[lang=php] // controlleur function accueilAction(){ $this->view->centre = $this->action('centre', 'afficheur' [, 'module'] ); ..... } // vue <div id="center_div"> <?= $this->centre; ?> </div>
Mais ce n'est pas la seul méthode, à toi de voir...
Hors ligne
Merci beaucoup! Je vais regarder ça attentivement.
Hors ligne