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 :

Accès aux vues à partir d'un plugin


Sujet :

MVC PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 277
    Points : 93
    Points
    93
    Par défaut Accès aux vues à partir d'un plugin
    Bonjour à tous,

    J'ai créé un plugin qui gère toute la partie d'authentification du membre.

    Je voudrais profiter de ce plugin pour envoyer également les variables d'authentification à la vue. Je fais donc ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $this->view->user = Zend_Auth::getInstance()->getIdentity()
    Evidemment, cela ne marche pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Strict Standards: Creating default object from empty value in *******
    Même si je pense que la vue n'est pas accessible depuis un plugin en preDispatch, il doit y avoir une solution mais je n'arrive pas à la trouver.

    Avez vous une piste ?

  2. #2
    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,

    Peux-tu nous montrer le code de ta classe plugin ?

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 277
    Points : 93
    Points
    93
    Par défaut
    Je pense que le code de mon plugin à peu d'importance. On pourrait simplement imaginé un plugin en preDispatch avec le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->view->user = Zend_Auth::getInstance()->getIdentity()
    de la même qu'on peut le faire dans le bloc init d'un controller.

    Cependant, d'après le message d'erreur, l'objet $this->view n'existe pas dans le plugin. Il n'est donc pas possible de lui attribuer des données.

    Sur le site z-f, on me conseille de:
    - instancier ta vue dans le bootstrap (tu peux la mettre dans la registry si tu veux y accéder n'importe où)
    - tu peux ajouter ce que tu veux dans ta vue depuis ton plugin
    - il faut ensuite assigner cette vue à ton contrôleur à l'aide d'un helper

    Je ne peux tester cette solution que ce soir. En attendant, je suis ouvert à toutes autres propositions.

  4. #4
    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
    Si je te demandais le code, c'était pour vérifier que tu récupérais bien un objet requête en paramètre (Zend_Controller_Request_Abstract).

    Tu dois pouvoir initialiser ta vue dans le plugin directement, en utilisant l'aide viewRenderer.

    Quelque chose comme (le paramètre étant $request) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
    $viewRenderer->init();
    $viewRenderer->view->module = $request->getModuleName();
    $viewRenderer->view->controller = $request->getControllerName();
    $viewRenderer->view->action = $request->getActionName();
    $viewRenderer->view->user = Zend_Auth::getInstance()->getIdentity();

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 277
    Points : 93
    Points
    93
    Par défaut
    Oki. Au temps pour moi.
    Voici le code d'appel de mon plugin depuis le bootstrap
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $frontController->registerPlugin(new My_Plugin_Auth());
    Voici le code de mon plugin (simplifier sur la partie qui nous intéresse)
    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
     
    class My_Plugin_Auth extends Zend_Controller_Plugin_Abstract
    {
     
    	public function preDispatch(Zend_Controller_Request_Abstract $request)
    	{
     
    		$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
    		$viewRenderer->init();
    		$viewRenderer->view->module = $request->getModuleName();
    		$viewRenderer->view->controller = $request->getControllerName();
    		$viewRenderer->view->action = $request->getActionName();
    		$viewRenderer->view->user = Zend_Auth::getInstance()->getIdentity();
     
     
    	}
    }
    Cependant, lorsque j'essaie d'afficher le contenu dans la vue, je n'ai rien du tout. Pas d'info et pas non plus de message d'erreur.

    Si je fais un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo print_r(Zend_Auth::getInstance()->getIdentity());
    Dans mon helper, j'ai bien l'affichage du tableau de mes variables d'authentification.
    C'est donc le passage des variables à la vue qui pose problème (à mon avis).

    Quelle est le problème ?

  6. #6
    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
    Là, je ne vois pas...

    J'ai fais un copier / coller de ta classe dans une application test chez moi, en changeant uniquement le contenu de la propriété :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $viewRenderer->view->user = 'C\'est moi !';
    Et tout fonctionne : j'accède bien à cette propriété dans ma vue...

  7. #7
    Membre régulier
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 277
    Points : 93
    Points
    93
    Par défaut
    A oui, en effet, ça marche bien. Cependant j'utilise un layout

    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
     
    <html>
    	<head>
    		<?php echo $this->headMeta(); ?> 
    		<?php echo $this->headTitle();?> 
    		<?php echo $this->headLink(); ?> 
    	</head>
    	<body>
    		<div id="bodyall">
    <?php echo $this->action('header','part','formatting'); ?> 
    <?php echo $this->action('advertareaheader','part','advert'); ?> 
    			<div id="box_container">
    <?php echo $this->layout()->content; ?>	
    <?php echo $this->action('rightmenu','formatting','news'); ?> 
    				<div class="cleaner"></div>
    			</div>
    <?php echo $this->action('footer','part','formatting'); ?> 		
    		</div>
    	</body>
    </html>
    Ce que j'essayai de faire, c'était d'afficher le contenu de $this->user depuis mon fichier part/header.phtml qui est inclut par le layout.

    Pourquoi n'est-il pas possible de le faire depuis l'action ?


    [edit]

    En fait, je vais utiliser le duo plugin+helper. Avec le plugin je gère l'authentification et avec le helper, je gère les informations sur le user et le passage des infos aux différentes vues.

    Je ne trouve pas de meilleure solution...

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

Discussions similaires

  1. Interdire l'accés aux vues
    Par Catarssis dans le forum Développement Sharepoint
    Réponses: 1
    Dernier message: 29/01/2013, 16h05
  2. Accès aux vues Agendas et Taches de LotusNote via java
    Par Actarus78 dans le forum Lotus Notes
    Réponses: 5
    Dernier message: 23/08/2011, 09h34
  3. Modification du chemin d'accès aux vues
    Par yamatoshi dans le forum MVC
    Réponses: 6
    Dernier message: 21/05/2010, 12h13
  4. Réponses: 4
    Dernier message: 21/08/2009, 14h57
  5. Droit d'accès aux vues ?!
    Par tibi666 dans le forum Requêtes
    Réponses: 5
    Dernier message: 30/04/2007, 13h11

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