Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 23-03-2009 11:19:54

gostbuster
Membre
Date d'inscription: 11-03-2009
Messages: 160

[résolu] layout, viewRenderer et actionStack

Bonjour à tous,

J'ai fait l'acquisition ce week end du livre Zend Framework de Julien Pauli afin d'apprendre et progresser avec Zend.

J'en profite donc pour m'appuyer sur l'ouvrage afin "d'améliorer" mon code et de bien comprendre ce qu'il se passe à chaque ligne,

Cependant quelque chose reste flou :

Jusqu'à présent, mes pages étaient divisées en plusieurs parties, et j'utilisais actionStack pour rendre chaque partie :

Code:

$actionStack = Zend_Controller_Action_HelperBroker::getStaticHelper('actionStack');
$actionStack->actionToStack('footer','index');
$actionStack->actionToStack('menu','menu');
$actionStack->actionToStack('header','index');

Dans le livre, page 88, le chapitre sur Zend_Layout est abordé.

Il est expliqué comment structurer le fichier menu seulement il n'est pas expliqué comment est rendue la vue

Ainsi, comment faut il spécifier un truc du genre :

"pour toutes les pages, c'est toi l'unique controlleur MenuControlleur qui appellera ta methode menuAction()" ?

Dans le livre il est simplement écrit :

Code:

$this->layout()->menu;

Merci.

Ps :en fait dans le livre, il est ecri que la méthode Init() de ReservationController contient tout le "matériel" de génération du menu, sauf que cette methode sera executée si on appelle le controlleur Réservation, pas si on appelle un autre controlleur. Or, il faut que le menu soit généré peut importe la page...

Merci encore

Dernière modification par gostbuster (24-03-2009 10:08:31)


Gostbuster - Développeur WEB

Hors ligne

 

#2 23-03-2009 20:30:17

Intiilapa
Membre
Date d'inscription: 03-02-2009
Messages: 95

Re: [résolu] layout, viewRenderer et actionStack

Après, c'est un peu de la logique j'ai envie de dire.

Soit tu te bases sur la POO, tu fais un contrôleur qui définit la méthode init() pour tout le monde. Puis, tes contrôleurs héritent du contrôleur dont je parle précédemment. Le fait que le nom d'une classe contrôleur dans un projet modulaire ne respecte pas la convention Zend pose un soucis avec l'autoload. L'une des solutions est de faire un Zend_Loader:loadClass() mais c'est un peu dommage ^^

Soit tu te bases sur l'architecture Zend, tu as besoin d'une action commune à plusieurs contrôleurs. Cela signifie utiliser une aide d'action. Tu appelles cette aide d'action dans chaque méthode init() de contrôleur où tu as besoin de ton menu.

Voilà smile

Hors ligne

 

#3 24-03-2009 09:17:48

gostbuster
Membre
Date d'inscription: 11-03-2009
Messages: 160

Re: [résolu] layout, viewRenderer et actionStack

Bonjour et merci pour ces informations, en effet si je me base sur l'architecture Zend, cela signifie que dans chaque controlleur, je vais devoir spécifier une ligne pour mon menu (communs à tous).

Je trouve cela bizarre puisque je pensais que le but de Zend était "don't repeat yourself", or ici ce serait le cas, non ?


Gostbuster - Développeur WEB

Hors ligne

 

#4 24-03-2009 10:03:53

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: [résolu] layout, viewRenderer et actionStack

Code:

class ControllerAction extends Zend_Controller_Action {
    public function init() {
        //... ton init commun
        $this->myInit();
    }

    // a surcharger dans les classes filles
    public function myInit() {}
}

class MonController1 extends ControllerAction {
    public function myInit() {
        ///... inint  propre au controller si besoin
    }

    public function trucBiduleAction() {
        //..
    }
}

Ca t'inspire ça ?

Hors ligne

 

#5 24-03-2009 10:08:14

gostbuster
Membre
Date d'inscription: 11-03-2009
Messages: 160

Re: [résolu] layout, viewRenderer et actionStack

Absolument, je pense que ca va m'inspirer.
Merci big_smile


Gostbuster - Développeur WEB

Hors ligne

 

#6 10-04-2009 18:24:29

forevermoon
Membre
Date d'inscription: 10-04-2009
Messages: 45

Re: [résolu] layout, viewRenderer et actionStack

bonjour question bete:

MonController1 prend la priorité dans toute l'application ?

Hors ligne

 

#7 11-05-2009 22:13:15

pronorama
Membre
Date d'inscription: 24-09-2007
Messages: 17
Site web

Re: [résolu] layout, viewRenderer et actionStack

gostbuster a écrit:

Bonjour et merci pour ces informations, en effet si je me base sur l'architecture Zend, cela signifie que dans chaque controlleur, je vais devoir spécifier une ligne pour mon menu (communs à tous).

Je trouve cela bizarre puisque je pensais que le but de Zend était "don't repeat yourself", or ici ce serait le cas, non ?

Bonjour,

Dans mon application (en cours de refonte ZF1.0 => ZF1.8), j'ai également un menu qui doit s'afficher dans toutes les pages de mon application.

Je me suis orienté vers la création d'un plugin au niveau "controller".
Dans sa fonction "postDispatch", je génère le HTML du menu et je l'injecte dans la "réponse" via un "this->getResponse()->append('menu', $html);

Comme j'utilise Zend_Layout, il me suffit ensuite dans le fichier "layout.phtml" de restituer ce code html via un simple "echo $this->layout()->menu"

Du coup, je n'ai plus rien à coder dans les controlleurs, ni ailleurs !
Pour l'instant j'ai juste prototypé la solution.
Ca fonctionne correctement et je n'ai pas encore vu de risques ou d'inconvénients particuliers.

Cordialement

Philippe

PS : j'avais également testé la solution "actionstack" comme indiqué dans le 1er message et ça fonctionnait bien aussi. Par contre je n'ai pas compris la question "comment est rendue la vue" ? A priori elle est rendue comme pour action "classique". Donc dans l'exemple en question, l'action "menu" du controlleur "menu" doit construire le menu et il sera rendu automatique par "menu.phtml". Et comme "menu/menu" est dans la pile, il sera appelé systématiquement pour chaque action de l'application.

Dernière modification par pronorama (11-05-2009 22:21:33)

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