IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Zend Framework PHP Discussion :

Utiliser un HelperBroker


Sujet :

Zend Framework PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 360
    Par défaut Utiliser un HelperBroker
    Bonjour,

    en fait, la question serait qu'est-ce qu'un HelperBroker dans une vue ? Je suis un tutorial Atelier Zend Framework : Utilisation du helper ViewRenderer, je cherche à comprendre le fonctionnement des vues. Mais je ne comprends pas ce code, malgré les explications que j'ai pu trouver sur le site officiel concernant les helpers (d'autant plus qu'une grande partie n'a pas été traduite).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('ViewRenderer');
    $viewRenderer->setView($view)
                 ->setViewBasePathSpec(':moduleDir/views') // facultatif => comportement par défaut
                 ->setViewScriptPathSpec(':controller:action.:suffix')// par défaut : :controller/:action.:suffix
                 ->setViewScriptPathNoControllerSpec(':action.:suffix') // facultatif => comportement par défaut
                 ->setResponseSegment('body');
    Zend_Controller_Action_HelperBroker::addHelper($viewRenderer);*/
    J'ai déjà du mal à comprendre le concept des helpers et l'intéraction dans les vues mais avec les Broker, c'est vraiment dur. Si vous pouvez m'apporter des précisions concernant ce code ?

    Merci beaucoup

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 70
    Par défaut
    Salut,

    En fait, c'est assez simple. Enfin, c'est plus simple que tu ne peut le penser.

    Je crois que la meilleure des façons pour comprendre le helperbroker, c'est d'ouvrir ton editeur et de scruter le code ! ^^

    Grosomodo, le helperbroker agit comme une "super-registry" de helpers.
    C'est lui qui contiendra toutes les instances des helpers que tu utiliseras dans l'attribut de classe '$_helpers".

    L'helperbroker contient les méthodes communes aux helpers : notifyPreDispatch, notifyPostDispatch, etc.... Il intègre aussi les méthodes magiques __call et __get, te permettant respectivement de lancer un helper dynamiquement, et de récupérer un helper.

    De manière générale, il centralise tous les helpers, et contient plusieurs méthodes te permettant de régler tout ça : addPrefix(), addPath(), removeHelper(), hasHelper(), getHelper() etc...

    Si tu regarde le contenu de la méthode notifyPostDispatch() de Zend_Controller_Action_HelperBroker, elle contient une boucle foreach() qui lancera la méthode postDispatch() de chacun des helpers enregistrés dans $_helpers.

    N'hésites pas à poser des questions si c'est encore un peu flou. Mais comme je t'ai dit, la meilleure des façons de comprendre, selon moi, c'est toujours de trifouiller dans le code

  3. #3
    Membre éclairé
    Inscrit en
    Septembre 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 360
    Par défaut
    J'ai suivi ton conseil, j'ai regardé le code des helper. Déjà, c'était une chose que je n'avais jamais faite, regarder comment était codé les classes, j'ai été surpris de la lisibilité du code et la description de chaque classe.

    Mais entre la documentation officiel, les tutos et le code j'ai l'impression d'être russe et de me retrouver devant le Larousse, et devoir écrire un roman en français.

    Donc, le HelperBroker agit comme le $frontController, il y'en a qu'un et c'est lui qui pilote tous les Helper ? N'empêche que je ne comprends toujours pas car dans le chapitre 38.4.2. Chemin des aides il est écrit que j'ajoute le chemin d'aide comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $view = new Zend_View();
    $view->setHelperPath('/chemin/vers/plus/de/classes/d-aides', 'Ma_View_Helper');
    Alors je ne comprends toujours pas le code de mon premier post et surtout :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Zend_Controller_Action_HelperBroker::addHelper($viewRenderer);
    Pourquoi d'un côté j'ajoute une vue au Broker dans la doc c'est la vue qui gère le Helper ?

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 70
    Par défaut
    Je crois qu'il y a confusion entre les helpers d'actions Zend_Controller_Action_Helper et les helpers de vues Zend_View_Helper...

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 70
    Par défaut
    Un conseil, si tu souhaites mieux comprendre le code des helpers d'actions et de vues, ne regardes pas en premier lieux le code du ViewRenderer, c'est de loin, il me semble, la plus fournie.

    Commence plutôt par des petits helpers, ce sera plus facile.

    Zend_Controller_Action_Helper
    Ils te servent comme d'aide, pour le contexte du controller. C'est a dire que tu vas utiliser ces helpers dans ton controllers :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    MyController extends Zend_Controller_Action
    {
        public function indexAction() 
        {
            $myHelper = $this->_helpers->myHelper;
        }
    }
    Zend_View_Helper
    Ils te servent comme d'aide, pour le contexte de la vue. C'est a dire que tu vas utiliser ces helpers dans ta vue :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     Dans le controller :
    MyController extends Zend_Controller_Action
    {
        public function indexAction() 
        {
            $this->view->myHelper();
        }
    }
    
     Dans une vue :
    ...
    $this->myHelper();
    ...

  6. #6
    Membre éclairé
    Inscrit en
    Septembre 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 360
    Par défaut
    Merci, je me suis tapé la doc ce week. Théoriquement j'ai compris le fonctionnement. Effectivement, j'ai mélangé les helpers des views et des ControllerAction. Je vais continuer mon apprentissage et je reviendrai certainement plus tard.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 15h57
  2. Réponses: 4
    Dernier message: 05/06/2002, 14h35
  3. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36
  4. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo