Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 08-04-2011 16:40:38

kissoul
Nouveau membre
Date d'inscription: 28-10-2010
Messages: 3

instancier un controller dans un controller

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:

Code:

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:

Code:

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

 

#2 09-04-2011 09:06:11

Dede
Membre
Date d'inscription: 26-06-2009
Messages: 99

Re: instancier un controller dans un controller

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 :

Code:

[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...


« Il ne faut pas lier un navire à une seule ancre, ni une vie à un seul espoir. »
Epictète
http://www.noumcreation.com

Hors ligne

 

#3 11-04-2011 14:39:33

kissoul
Nouveau membre
Date d'inscription: 28-10-2010
Messages: 3

Re: instancier un controller dans un controller

Merci beaucoup! Je vais regarder ça attentivement.

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages