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

MVC PHP Discussion :

Helper pour les vues ou les controllers


Sujet :

MVC PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 214
    Points : 100
    Points
    100
    Par défaut Helper pour les vues ou les controllers
    Bonjour à tous.

    Je continue mon exploration dans le Zend Framework et j'ai compris que les helpers pouvaient notamment me permettre d'exécuter des tâches récurrentes à chaque controllers comme par exemple vérifier l'identification de l'utilisateur etc...

    En gros actuellement dans tous mes controllers j'ai cette fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	function init() {
            $this->view->translator = Zend_Registry::get('translator');   
            $this->view->setEscape('utf8_encode');
    		$response = $this->getResponse();
            $response->insert('header', 
                              $this->view->render('common/header.phtml'));
            $response->insert('footer', 
                              $this->view->render('common/footer.phtml'));
        }
    L'idée est donc bien entendu de mettre ces informations dans un Helper pour ne plus devoir les placer dans mes controllers.

    Seulement là je bloque un peu... je me dis que je dois créer une classe héritant de Zend_Controller_Action_Helper_Abstract et redéfinir la fonction preDispatch() mais je ne sais pas quoi y mettre étant donné que le $this dans ce cas-ci est bien entendu totalement différent.

    Voilà, pouvez-vous m'aider?

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 214
    Points : 100
    Points
    100
    Par défaut
    Bon je vais tenter de mieux m'exprimer vu que personne ne semble comprendre ce que je souhaite

    En gros j'ai besoin d'utiliser un layout pour toutes mes vues. Dans un premier temps, très simple: un header, le contenu et le footer.

    J'y suis parvenu à présent avec cette page layout.phtml:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <body>
      <div>
        <?php echo $this->layout()->header; ?>
      </div>
      <div>
        <?php echo $this->layout()->content ?>
      </div>
      <div>
        <?php echo $this->layout()->footer; ?>
      </div>
    </body>
    Et dans chacun de mes controllers, je place dans la fonction init ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $response = $this->getResponse();
            $response->insert('header', 
                              $this->view->render('common/header.phtml'));
            $response->insert('footer', 
                              $this->view->render('common/footer.phtml'));
    En plus de cela, je dois également aller récupérer un "translator" enregistré dans le Registre. Ce code est toujours dans la fonction init de mes controller:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->view->translator = Zend_Registry::get('translator');
    Jusque là, si j'ai bien compris le principe des Helper et des Plugin, je pense que j'ai intérêt à créer un helper pour ne plus devoir répéter ce code dans chaque controller. Bon bien... sauf que je ne vois pas quel Helper faire et encore moins comment retrouver les informations sur la future vue.

    Enfin, je dois avoir un système de contrôle d'accès. Là si j'ai bien compris, je dois gérer le tout dans un plugin dans la fonction preDispatch.

    Navré pour ces questions sans doutes banales mais j'avoue être un peu perdu surtout que les explications sur le net varient toujours en fonction de la version...

    (Tiens et tant qu'on y est, je souhaite utiliser Zend_Dojo_form pour tous mes formulaires, vous y avez déjà gouté?)

  3. #3
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Bonjour,

    Je vais essayer de t'aider avec mes connaissances encore partielles du ZF. SI je me trompe, j'espère que des personnes plus compétentes me corrigeront .

    Pour ton layout, si ton header et ton footer sont simples (pas d'utilisation de données récupérées par une action), alors pourquoi ne pas faire dans ton layout quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <body>
      <div>
        <?php echo $this->partial("header.phtml"); ?>
      </div>
      <div>
        <?php echo $this->layout()->content ?>
      </div>
      <div>
        <?php echo $this->partial("footer.phtml"); ?>
      </div>
    </body>
    Cela aura pour effet de rendre les fichiers header et footer contenus dans le même répertoire que ton layout.

    Pour initialiser le translator, tu peux en effet utiliser un plugin. Je te propose d'essayer avec une méthode dispatchLoopStartup, quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    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();
        $view->translator = Zend_Registry::get('translator');
    }
    Pour Dojo, je n'ai pas encore testé

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 214
    Points : 100
    Points
    100
    Par défaut
    Alors pour ce qui est de mon Header je vais y placer des informations de session:

    "Bonjour truc - Déconnexion" donc il faudra une action là-dedans.

    En fait, je viens de tester un solution qui fonctionne avec un helper!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    class ViewLayoutHelper extends Zend_Controller_Action_Helper_Abstract   {
     
    	public function preDispatch() {
     
    		// Récupération des informations sur la vue et le controller
    		$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
    		$viewRenderer->init();
    		$viewRenderer->view->module = $this->getRequest()->getModuleName();
    		$viewRenderer->view->controller = $this->getRequest()->getControllerName();
    		$viewRenderer->view->action = $this->getRequest()->getActionName();
     
    		// On force le texte en utf8 
    		$viewRenderer->view->setEscape('utf8_encode');
     
    		// On cherche le translator dans le registre
    		$viewRenderer->view->translator = Zend_Registry::get('translator');
     
    		// On ajoute dans la réponse le header et le footer.
    		$response = $viewRenderer->getResponse();
    		$response->insert('header', 
                              $viewRenderer->view->render('common/header.phtml'));
            $response->insert('footer', 
                              $viewRenderer->view->render('common/footer.phtml'));
        }
     
    }
    Et là ça fonctionne parfaitement... donc je pense que c'est bon.

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

Discussions similaires

  1. Gérer dynamiquement les Splitters et les Vues.
    Par elecstr dans le forum MFC
    Réponses: 3
    Dernier message: 21/05/2007, 20h37
  2. les vues et les tables temporaires
    Par acipeg dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 28/11/2006, 14h15
  3. Réponses: 3
    Dernier message: 25/10/2006, 17h45
  4. Les index et les vues oracle
    Par kariba dans le forum Oracle
    Réponses: 13
    Dernier message: 18/07/2006, 09h42
  5. [DB2] Question sur les index et les vues
    Par ahoyeau dans le forum DB2
    Réponses: 1
    Dernier message: 14/03/2005, 08h30

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