Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 14-08-2008 01:31:35

slaughter
Membre
Date d'inscription: 01-04-2008
Messages: 217

Envoyer une variable à la vue depuis un plugin en preDispatch

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:

 $this->view->user = Zend_Auth::getInstance()->getIdentity()

Evidemment, cela ne marche pas.

Code:

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 ?

Hors ligne

 

#2 14-08-2008 09:17:29

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: Envoyer une variable à la vue depuis un plugin en preDispatch

Tu peux faire les opérations suivantes :
- 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

Dans le tuto http://www.kitpages.fr/zf_integrerSmarty.php j'utilise ce mécanisme pour une utilisation différente, mais tu peux faire la même chose avec la vue normale (Zend_View).

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#3 14-08-2008 10:02:04

slaughter
Membre
Date d'inscription: 01-04-2008
Messages: 217

Re: Envoyer une variable à la vue depuis un plugin en preDispatch

Je veux simplement faire une action en plugin pour éviter de le faire dans chaque bloc init de tous mes controllers. la particularité, c'est que cette action agit sur la vue. Est-ce bien la bonne solution que d'instancier ma vue ou est ce que c'est beaucoup de manipulation pour peu de chose finalement ?

En gros, est-ce que ma réflexion est bonne ou est-ce que je pars dans le mauvais sens?

Hors ligne

 

#4 14-08-2008 10:50:47

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: Envoyer une variable à la vue depuis un plugin en preDispatch

Je suis régulièrement confronté à ce problème et j'ai parfois besoin qu'un plugin envoie un message à la vue. Dans ce cas, j'utilise la méthode que j'ai décrite. (en fait j'utilise systématiquement cette méthode pour toutes mes applis...)

Sinon si tu ne veux pas entrer là dedans et si ton traitement le permet, tu peux déplacer ton traitement dans un helper. Dans ce cas tu as accès à la vue standard (avec un $this->getActionController()->view).

Mais dans le cas d'un authentification, ça me paraît mieux placé dans un plugin effectivement...

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#5 14-08-2008 11:02:09

slaughter
Membre
Date d'inscription: 01-04-2008
Messages: 217

Re: Envoyer une variable à la vue depuis un plugin en preDispatch

Oki. J'avais besoin de cette confirmation pour être sure d'aller dans la bonne direction.
Le tuto que tu m'as donné en lien me semble assez logique. Je testerai tout cela ce soir et je vous informerai sur le résultat.

Merci.

Hors ligne

 

#6 14-08-2008 22:51:05

slaughter
Membre
Date d'inscription: 01-04-2008
Messages: 217

Re: Envoyer une variable à la vue depuis un plugin en preDispatch

Je suis en train de faire les tests et une fois devant le code, la pratique est plus compliquée que la théorie. J'ai donc plusieurs question :

1) Voilà comment je rajoute un plugin à mon application :

Code:

$frontController->registerPlugin(new My_Plugin_Auth());

A partir de là, je ne vois pas comment faire pour donner la vue à mon plugin. Dans ton exemple, tu utilises un plugin.
Quel est le moyen de passer la vue à mon plugin ?

2) Dans le plugin, comment renvoyer les informations que je veux à ma vue?

Hors ligne

 

#7 15-08-2008 14:20:10

Julien
Membre
Date d'inscription: 16-03-2007
Messages: 501

Re: Envoyer une variable à la vue depuis un plugin en preDispatch

Utilise le helperBroker, il contient ViewRenderer qui est le seul à connaitre la vue.
On prévoit pour ZF2 une meilleure intégration de la vue directement dans FC, ce qui n'est pas le cas actuellement, d'où l'horrible code :

$vr = Zend_Controller_Action_HelperBroker::getStaticHelper('ViewRenderer');
$vr->init(); // init() du helper si premier passage dedans
$view = $vr->view; //$view est la vue

Hors ligne

 

#8 15-08-2008 16:07:19

slaughter
Membre
Date d'inscription: 01-04-2008
Messages: 217

Re: Envoyer une variable à la vue depuis un plugin en preDispatch

Oki.

Donc ça marche bien. J'arrive à envoyer une variable à ma vue depuis mon plugin.
Il me reste toute de même une chose à faire. J'utilise un layout :

Code:

<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>

Et ce que je veux faire, c'est d'afficher le contenu de $this->user depuis mon fichier part/header.phtml qui est inclut par le layout mais rien ne s'affiche.

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...

Dernière modification par slaughter (16-08-2008 01:54:54)

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