Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework > MVC
MVC Forum de support sur le développement d'applications de type modèle-vue-contrôleur avec Zend Framework ainsi que vos questions sur les plugins, les helpers etc. Avant de poster -> Cours MVC, FAQ ZF Controller
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/08/2008, 01h28   #1
Membre du Club
 
Homme Jonathan
Inscription : avril 2007
Messages : 274
Détails du profil
Informations personnelles :
Nom : Homme Jonathan

Informations forums :
Inscription : avril 2007
Messages : 274
Points : 57
Points : 57
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 :
1
2
 
$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 ?
Jonathan.b est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/08/2008, 11h41   #2
Expert Confirmé
 
Avatar de Eusebe
 
Inscription : mars 2006
Messages : 1 989
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : mars 2006
Messages : 1 989
Points : 3 606
Points : 3 606
Bonjour,

Peux-tu nous montrer le code de ta classe plugin ?
Eusebe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/08/2008, 12h10   #3
Membre du Club
 
Homme Jonathan
Inscription : avril 2007
Messages : 274
Détails du profil
Informations personnelles :
Nom : Homme Jonathan

Informations forums :
Inscription : avril 2007
Messages : 274
Points : 57
Points : 57
Je pense que le code de mon plugin à peu d'importance. On pourrait simplement imaginé un plugin en preDispatch avec le code
Code :
$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.
Jonathan.b est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/08/2008, 12h21   #4
Expert Confirmé
 
Avatar de Eusebe
 
Inscription : mars 2006
Messages : 1 989
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : mars 2006
Messages : 1 989
Points : 3 606
Points : 3 606
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 :
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();
Eusebe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/08/2008, 22h59   #5
Membre du Club
 
Homme Jonathan
Inscription : avril 2007
Messages : 274
Détails du profil
Informations personnelles :
Nom : Homme Jonathan

Informations forums :
Inscription : avril 2007
Messages : 274
Points : 57
Points : 57
Oki. Au temps pour moi.
Voici le code d'appel de mon plugin depuis le bootstrap
Code :
1
2
 
$frontController->registerPlugin(new My_Plugin_Auth());
Voici le code de mon plugin (simplifier sur la partie qui nous intéresse)
Code :
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 :
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 ?
Jonathan.b est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/08/2008, 13h33   #6
Expert Confirmé
 
Avatar de Eusebe
 
Inscription : mars 2006
Messages : 1 989
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : mars 2006
Messages : 1 989
Points : 3 606
Points : 3 606
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 :
$viewRenderer->view->user = 'C\'est moi !';
Et tout fonctionne : j'accède bien à cette propriété dans ma vue...
Eusebe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/08/2008, 14h37   #7
Membre du Club
 
Homme Jonathan
Inscription : avril 2007
Messages : 274
Détails du profil
Informations personnelles :
Nom : Homme Jonathan

Informations forums :
Inscription : avril 2007
Messages : 274
Points : 57
Points : 57
A oui, en effet, ça marche bien. Cependant j'utilise un layout

Code :
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...
Jonathan.b est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h17.


 
 
 
 
Partenaires

Hébergement Web