Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 12-09-2008 08:44:19

deviltaz
Membre
Date d'inscription: 09-09-2008
Messages: 37

[Résolu][Zend_Controller][1.5.3]Pas de passage de variables à la vue ?

Bonjour,

je m'excuse du manque de précision de cette question,
mais est ce que quelque chose peut empêcher le passage
de variables entre un contrôleur et une vue ?

Controleur :

Code:

    public function postDispatch()
    {
        $actionName = $this->getRequest()->getActionName();
        $this->render('menu', 'left');
        $this->render($actionName, 'right');
    }

    public function indexAction()
    {
        $this->view->mon_message = "Du blabla ...";
    }

    public function menuAction()
    {
        $this->view->message = 'Un autre blabla';
    }

Layout :

Code:

<?php echo $this->layout()->left ?>

Curieusement le message de l'action index est correctement affiché
mais pas celui du menu.

D'avance merci d'aider un débutant troublé par ce comportement :-(

Dernière modification par deviltaz (16-09-2008 08:19:20)

Hors ligne

 

#2 12-09-2008 12:06:11

deviltaz
Membre
Date d'inscription: 09-09-2008
Messages: 37

Re: [Résolu][Zend_Controller][1.5.3]Pas de passage de variables à la vue ?

Nouvel élément surprenant, j'utilise une fonction init dans mon controleur :

Code:

    public function init()
    {
        $this->view->user = Zend_Auth::getInstance()->getIdentity();
    }

La variable user est bien accessible à ma vue en revanche.

Je m'y perds :?

Hors ligne

 

#3 12-09-2008 12:42:02

deviltaz
Membre
Date d'inscription: 09-09-2008
Messages: 37

Re: [Résolu][Zend_Controller][1.5.3]Pas de passage de variables à la vue ?

Un doute affreux me traverse l'esprit après avoir épluché la doc.

L'appel de la fonction $this->render( ... ) provoque l'affichage de la vue
mais j'ai l'impression que l'action n'est pas pour autant éxécutée.

Ainsi les assignements de variables précisées dans les actions n'aboutissent pas.

Finalement, je ne suis pas certain que l'utilisation de cette fonction render
ne soit l'idéal pour palier à mon souci de layout. (voir ce thread )

Hors ligne

 

#4 12-09-2008 13:55:12

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: [Résolu][Zend_Controller][1.5.3]Pas de passage de variables à la vue ?

L'action demandé est index.

D'après ton code :
- Execution de indexAction
- Execution de postDispatch
-- Rendu de la vue menu avec le nom 'left'
-- Rendu de la vue $actionName avec le nom 'right'

Comme tu le vois, je n'ai pas marqué 'execution de l'action menuAction()

Render en fait que rendre des vues basé sur l'action courante (je paraphrase la doc), et l'action courante, c'est 'index'.

Donc, tu l'as bien compris toi même, une action n'est appelé par Render


----
Gruiiik !

Hors ligne

 

#5 12-09-2008 19:50:11

deviltaz
Membre
Date d'inscription: 09-09-2008
Messages: 37

Re: [Résolu][Zend_Controller][1.5.3]Pas de passage de variables à la vue ?

Ca va alors, j'avais bien compris la doc ;-)

Bon, comme solution à mon problème de layout,
render n'est donc pas la solution idéale.

Je vais me pencher sur la notion d'actionStack.

Hors ligne

 

#6 13-09-2008 10:02:06

_Fuse_
Membre
Lieu: Aquitaine
Date d'inscription: 10-07-2008
Messages: 92

Re: [Résolu][Zend_Controller][1.5.3]Pas de passage de variables à la vue ?

Salut,

Peut tu preciser l'arborescence de tes dossiers (au moins pour les controllers et les vues).
Je pense que ton probleme vien de la.

@ bientot

Hors ligne

 

#7 14-09-2008 23:02:28

deviltaz
Membre
Date d'inscription: 09-09-2008
Messages: 37

Re: [Résolu][Zend_Controller][1.5.3]Pas de passage de variables à la vue ?

En fait, j'essaie d'implémenter au mieux mon layout.
Je souhaite un header, une barre de navigation et un footer communs
à l'ensemble du site.

Là où ça se complique pour moi, c'est pour le contenu dynamique.

Celui-ci serait pour mon cas divisé en deux parties :
un menu qui serait géré par une action de chaque contrôleur
et le contenu en lui-même.

Le souci est surtout pour le menu.
J'ignore au niveau du layout quel menu afficher,
l'utilisation de action() me parait donc impossible.

Du côté des actionStack je suppose que ça pourrait fonctionner
à condition d'injecter l'action menu du contrôleur appelé par la requête.

C'est pour l'instant la piste que j'essaie de suivre.

En réponse à cotre question, voici à quoi ressemble mon arborescence :

Code:

mon_appli
/application
    /controllers
        IndexController.php
            indexAction
            navAction
            headerAction
            footerAction
            menuAction
        AuthController.php
            indexAction
            loginAction
            logoutAction
            menuAction
        CompoundController.php
            indexAction
            menuAction
    /models
    /views
        /layouts
        /scripts
            /index
                index.phtml
                nav.phtml
                header.phtml
                footer.phtml
                menu.phtml
            /auth
                login.phtml
                menu.phtml
            /compound
                index.phtml
                menu.phtml
/db
/library
/web_root

D'avance merci si vous avez des conseils pouvant m'aider.

Dernière modification par deviltaz (15-09-2008 07:39:14)

Hors ligne

 

#8 15-09-2008 09:32:34

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: [Résolu][Zend_Controller][1.5.3]Pas de passage de variables à la vue ?

deviltaz, tu n'es pas assez imaginatif.
Pense à tous les composants que t'offre le Zf.
- Tu peux initialiser les composants ou tu veux
- Tu peux greffer du code n'import ou dans le processus d'execution du framework

Par exemple, tu peux utiliser un plugin qui initialise des valeurs dans ta vue qui corresponds aux actions demandé :

Code:

 public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request)
  {
    $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
    $viewRenderer->init();

    $view = $viewRenderer->view;

    $view->module = $request->getModuleName();
    $view->controller = $request->getControllerName();
    $view->action = $request->getActionName();
}

Ainsi, dans ton layout, tu peux maintenant appelé action comme tu le veux (action->($this->crion)) smile

Ce n'est qu'un exemple, réfléchi et trouve ce qui te convient le mieux

Rien n'est impossible smile

Dernière modification par nORKy (15-09-2008 09:36:59)


----
Gruiiik !

Hors ligne

 

#9 15-09-2008 10:42:33

gchau
Membre
Date d'inscription: 15-05-2008
Messages: 17

Re: [Résolu][Zend_Controller][1.5.3]Pas de passage de variables à la vue ?

Ton problème bien qu’intéressant n’est pas, à mon sens, décrit de manière assez précise (peut-être n’est ce pas très clair pour toi même ), en tout cas pour la partie variable de ton layout. Donc il serait  bon à mon avis  que tu formules, d’une part  l’objectif de ton site et d’autre part les cas d’utilisation qui vont amener à faire varier certains éléments de ton layout .
Pour ma part j’ai l’impression qu’au départ tu as une action utilisateur sur ton menu principal et que celle-ci aboutit  (outre la partie fixe du layout) à l’affichage d’un certain contenu et sur une sorte de menu contextuel .  Mais je ne suis pas sur que ce soit cela et même si c’est celà ,ça reste vague il faut aller plus loin dans ton analyse.
D’autre part je suis curieux de savoir ce qui se cache au moins fonctionnellement derrière ce  « CompoundController.php ».
ZF est une excellente boîte à outils mais il faut reconnaître que pour certains composants qui sont déjà difficiles à comprendre, comme c’est le cas du Zend_Layout , il manque cruellement de  démarche standard entre  un problème  type et sa solution  ( mais peut-être n’y en a-t-il pas dans le cas du Zend_Layout par ex pour savoir si on doit utiliser  ActionStack  ou  action view helper).   
Indépendamment de celà je ne vois pas très bien non plus de cas d’utilisation du plugin de nOrky.

Hors ligne

 

#10 15-09-2008 11:16:01

deviltaz
Membre
Date d'inscription: 09-09-2008
Messages: 37

Re: [Résolu][Zend_Controller][1.5.3]Pas de passage de variables à la vue ?

Merci de ces réponses, c'est toujours encourageant d'avoir des réponses ;-)

Suite à votre demande, je vais vous préciser les objectifs du site en question.
J'étais passé rapidement là-dessus pour que la lecture du post ne soit pas trop fastidieuse
mais ça doit être nécessaire pour avoir une bonne compréhension de mon souci.

Le site sera utilisé exclusivement en intra et son but premier est une gestion de formulations.
Vous pouvez imaginer cela comme une liste de recettes de cuisine.

J'ai deux accès possibles que j'ai baptisé 'visu' et 'admin' qui me permettent de distinguer
des utilisateurs qui pourront seulement visualiser les recettes et d'autres qui auront des
responsabilités d'ajout, édition et suppression de recettes.

C'est cette gestion de recettes qui est baptisée 'Compound'.

A côté de cela, il existera une fonction de traçabilité des réalisations de chacune de ces recettes.
Il s'agit là d'un autre volet de l'application, soit pour moi un autre contrôleur dans ce que j'ai compris de MVC.

D'un point de vue fonctionnel, c'est une gestion de d'enregistrements de bdr sans souci majeur.

Là où je patauge, c'est davantage du côté du découpage du site étant novice en la matière.
J'imaginais un header, footer et une navigation fixe et en plus de cela un menu associé à chaque section de l'appli.

Je parviens en utilisant la fonction render à afficher du code html et ainsi afficher mon menu
mais sans appeler d'action spécifique pour le menu ce qui rend l'utilisation de variables impossible.

Voilà, j'ai essayé de synthétiser l'analyse de mes besoins au mieux, merci à ceux qui ont lu jusqu'ici ;-)

--> nORKy

JE vois à peu près le concept de ton plugin (du moins je crois)
mais mon souci serait plutôt d'appeler une action menu dans le layout
correspondant à l'action menu du contrôleur appelé dans la requête.
Et là je vois pas comment faire le lien.

Dernière modification par deviltaz (15-09-2008 11:19:39)

Hors ligne

 

#11 15-09-2008 15:32:46

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: [Résolu][Zend_Controller][1.5.3]Pas de passage de variables à la vue ?

Je te l'ai dit deviltaz, y'a toujours une solution smile

Il me semble que lorsque tu apelles action(), tu peux passé les valeurs null à controller et module pour indiquer d'utiliser les valeurs courantes. C'est ce que tu veux,non ?

Autre solution :
Regarde dans mon plugin plus haut comment j'ai obtenu le nom de l'action et du controller.
Tu as tout sous la main !
Rajoute une action dans l'actionStack avec 'action' qui vaut 'menu' et 'controller' qui vaut $controller smile

Dans ton layout, tu utilises les segments pour récupérer la vue de ton menu

Dernière modification par nORKy (15-09-2008 15:33:57)


----
Gruiiik !

Hors ligne

 

#12 15-09-2008 16:22:59

deviltaz
Membre
Date d'inscription: 09-09-2008
Messages: 37

Re: [Résolu][Zend_Controller][1.5.3]Pas de passage de variables à la vue ?

Merci de ces encouragements, l'essentiel est qu'il y ait toujours une solution ;-)

J'ai essayé d'appeler action() en mettant null en guise de controller mais ça ne semble pas faire ce que je souhaite.
Apparemment, dans ce cas c'est mon contrôleur Index qui serait utilisé.
Dommage, ce mode avait l'avantage de rester simple.

Deuxième solution proposée, le plugin actionStack dont j'ai du mal à m'imprégner.
Je vais faire des essais dans cette voie et relire le tuto de Julien Pauli,
il me semble qu'il utilise l'actionStack.

Hors ligne

 

#13 15-09-2008 17:51:21

gchau
Membre
Date d'inscription: 15-05-2008
Messages: 17

Re: [Résolu][Zend_Controller][1.5.3]Pas de passage de variables à la vue ?

Je m’aperçois que ma réponse très longue vient après celle de nORky qui est bcp plus compétent que moi mais bon je  l’envois quand même au cas où ça pourrait t’intéresser (ou d’autres).   
Tout d’abord on peut se tutoyer :je suis sur le même genre de pbmes avec  peut-être un peu d’avance sur
certaines choses mais encore beaucoup d’interrogations que je n’ai peut-être pas d’ailleurs suffisamment fait
partager sur ce forum (jusqu’à maintenant). 
Il y a des choses qui me paraissent encore floues  dans ton projet :
-Ta distinction admin et visu pour distinguer ceux qui vont créer les recettes et ceux qui vont les voir.
Pour la distinction d’accord mais plutôt que les termes choisis, si je peux me permettre, je dirais plutôt inscrits , visiteurs et pour la gestion du site (modérateur et webmaster par ex)  qu’il faut tjs prévoir à mon avis : admin.
A mon avis à ces 3 types d’acteurs peuvent correspondre 2 ou 3 modules selon qu’on distingue inscrits et
visiteurs . 

1)-La structure du fichier layout qui décrit la mise en page ( ce layout contient–il 1 ou 2 menus ?)
    avec un seul menu et en se limitant au <body> tu pourrais avoir qqc de classique comme :
            <div id="header">
    <?php echo $this->layout()->header ?>
            </div>
            <div id="menu">
    <?php echo $this->layout()->menu ?>
            </div>
           <div id=”content”>
    <?php echo $this->layout()->content ?>
           </div>
            <div id="footer">
    <?php echo $this->layout()->header ?>
           </div>
rem : l’utilisation d’expression telle que $this->layout()->header plutôt que $this->(‘header.phtml’) va permettre de faire évoluer le contenu du segment header sans toucher à ce fichier layout qui étant sensible ne doit pas être trop modifié.
Concernant ActionStack et les segments  il y a des bons tutos sur le sujet connexe du layout comme celui de Julien Pauli :
http://julien-pauli.developpez.com/tuto … nd-layout/ ainsi que : http://www.kitpages.fr/zf_helper_plugin.php ).

-Concernant les segments je dirais simplement qu’en dehors du segment très particulier « content » les autres peuvent nécessiter de faire appel à ActionStack pour demander à une action d’insérer un segment dans l’objet réponse. Il est également possible d’insérer un segment dans l’objet réponse à d’autres endroits : au niveau du bootstrap, dans l’action appelée par l’url, dans la fonction init()du controlleur appellé etc..
-Concernant ActionStack je ne résiste pas à dire ce que j’ai compris du mécanisme car cela n’a pas été sans peine et comme il est possible que je me trompe celà m'intéresse qu'on me le dise (quoique ce ne soit peut être pas très bien de squatter ce thread pour ça) : l'ActionStack est un mécanisme qui permet de simuler une requête à une action mais au lieu de passer par une url  on peut partir d’une autre action ou du bootstrap.  Il utilise le fait que pour une même requête le dispatcheur peut appeler à l’intèrieur d’une boucle plusieurs actions . 
-Tout d’abord on inscrit sa demande d’appel via un action helper 
-Lorsque le dispatcheur atteint l’état postdispatch suivant le plugin met la demande d’appel dans la pile des requêtes du dispatcheur
-Au pas suivant de la boucle de dispatching l’action qu’on a demandée est appellée (là j’ai un doute et j’invite  nORky  ou d’autres à corriger si nécessaire) .

2)-la structure contenu dans le ou les fichiers qui vont alimenter le segment content :
le « sous-menu » en fait-il partie ou bien est ce une variable du layout.

3)-et finalement quel est le contenu de ce « sous menu » (distinction des recettes par pays, par nature : entrée, soupes , plat principal, dessert) et surtout est ce qu’il dépend et comment de l’action rendue dans le segment content.
Excuse moi si je rentre un peu trop dans les détails de ton projet mais mon expérience personnelle de dvpt sur un site de e-commerce me dis qu’on ne se pose pas tjs toutes les questions qu’il faudrait.

Hors ligne

 

#14 16-09-2008 08:18:52

deviltaz
Membre
Date d'inscription: 09-09-2008
Messages: 37

Re: [Résolu][Zend_Controller][1.5.3]Pas de passage de variables à la vue ?

Votre persévérance a fini par payer !

L'étude approfondie du schéma de la séquence globale proposé sur kitPages m'a été d'un grand secours.
Malgré mes lectures, le rôle des plugins, helpers, viewHelpers n'était toujours pas clair pour moi
et le processus MVC l'était encore moins.

Je pense avoir compris un peu mieux les rudiments ce qui m'a permis de m'en sortir.

Pour les curieux, j'utilise donc un plugin dans lequel j'ai personnalisé la fonction dispatchLoopStartup.
Dans cette fonction, j'utilise l'actionStack pour y ajouter un appel à l'action menu du contrôleur appelé par la requête.

C'est pourtant ce qui m'a été conseillé assez tôt dans le thread mais je ne l'avais pas saisi.

Pour les conseils sur l'analyse de mon site :
En effet, l'utilisation d'un rôle admin me sera utile par la suite et la notion d'invité est plus juste.
Je vais donc revoir mes définitions d'acl en ce sens.

Encore une fois, merci de votre patience.
Pour ma part, je poursuis mon ascension vers une meilleure maitrise de zf
et ceci en très grande partie grâce à la communauté wink

Dernière modification par deviltaz (16-09-2008 08:23:24)

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