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 16/07/2007, 15h36   #1
Candidat au titre de Membre du Club
 
Inscription : mai 2005
Messages : 127
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 127
Points : 10
Points : 10
Par défaut Comment faire une redirection ponctuelle avec paramètre

Bonjour,
J'ai commencé à faire un petit site avec juste l'index et authentification (Auth)

Et quand une personne essaye de se loguer (avec Zend_Auth de Rob Allen) à la fin de la classe j'ai fait un $this->_redirect('/'); qui me renvoie donc à la page d'accueil (index).

Je voudrais savoir si on peut au moment de la redirection envoyer une variable et de la recuperer dans l'index pour, par exemple afficher un message.

Je sais qu'on peut faire une session mais j'avais plus l'idée de l'utiliser ponctuelle car j'ai besoin de cette variable que dans l'index.

Bref je ne sais pas si j'ai bien expliquer, je débute encore merci.
branqueira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2007, 16h18   #2
Membre éprouvé
 
Inscription : février 2004
Messages : 456
Détails du profil
Informations forums :
Inscription : février 2004
Messages : 456
Points : 428
Points : 428
Salut,

tu peux le faire en envoyant des variables par l'url (méthode GET).
billoum est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2007, 16h24   #3
Candidat au titre de Membre du Club
 
Inscription : mai 2005
Messages : 127
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 127
Points : 10
Points : 10
oui en fesant
Code :
$this->_redirect('/?toto=bidule')
mais je voudrais eviter d'avoir la variable dans l'url.

et je voudrais eviter de la mettre dans la session car elle sera instancié pendant toute l'application (enfin si je ne dis pas de betise)

sur ce lien, une personne a deja posé la meme question mais j'ai l'impression que la réponse n'est pas celle que j'attendais
http://www.developpez.net/forums/sho...d.php?t=340627
branqueira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2007, 17h18   #4
Membre éprouvé
 
Inscription : février 2004
Messages : 456
Détails du profil
Informations forums :
Inscription : février 2004
Messages : 456
Points : 428
Points : 428
Essaie de le faire par les sessions alors, tes variables n'existeront que tant que ta session est active (tant que tu places des session_start () en début de page).

Tu peux aussi supprimer la variable avec unlink () si nécessaire.
billoum est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2007, 17h25   #5
Candidat au titre de Membre du Club
 
Inscription : mai 2005
Messages : 127
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 127
Points : 10
Points : 10
Bon ben ok,
je pensais qu'il y avait une autre solution du genre

Code :
$this->_redirect('/','variable=blabla')
qui sait peut etre pour la prochaine version de Zend...

ou alors, je me complique trop la vie et ca se soigne

merci encore beaucoup pour vos réponses
branqueira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2007, 19h01   #6
Membre Expert
 
Inscription : janvier 2005
Messages : 1 249
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2005
Messages : 1 249
Points : 1 417
Points : 1 417
Personnellement, je ne suis pas pour le passage d'un message en GET. C'est pas propre du tout, un user peut afficher n'importe quoi en changeant le GET, et c'est potentiellement une faille XSS (soit directement si tu n'échappes pas la donnée, soit indirectement par affichage d'un message non désiré).
Sous réserve d'une autre méthode dans le ZF (ce qui m'intéresse d'ailleurs ), je te conseille les sessions. En revanche, pense à bien supprimer ta variable de session dès que tu l'as récupérée dans la nouvelle page, pour éviter un affichage intempestif, notamment si tu as 2 pages identiques ouvertes dans le même navigateur.
vg33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2007, 08h24   #7
Membre chevronné
 
Avatar de haltabush
 
Développeur Web
Inscription : avril 2005
Messages : 726
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : avril 2005
Messages : 726
Points : 790
Points : 790
Je vais peut-être dire une bétise, mais je crois que le Zend_Registry pourrait faire ce que tu veux, c'est à dire stocker provisoirement quelque chose (et pas définitivement comme avec une session).
Sinon pour la méthode Get, tu as un truc avec Zend : tes routes doivent être a peu près comme ça : "/module/controller/action" et avec des paramètres ça donne, par exemple "/module/controller/action/param1/value1/param2/value2"...
__________________
HADOPI : black-out du net!
haltabush est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2007, 08h50   #8
Membre Expert
 
Inscription : janvier 2005
Messages : 1 249
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2005
Messages : 1 249
Points : 1 417
Points : 1 417
Citation:
Envoyé par haltabush
Je vais peut-être dire une bétise, mais je crois que le Zend_Registry pourrait faire ce que tu veux, c'est à dire stocker provisoirement quelque chose (et pas définitivement comme avec une session).
Cette méthode ne fonctionne pas ici. Le registre sert en effet à stocker une donnée pendant le déroulement du script pour la partager proprement entre tous les contrôleurs. Le registre est détruit à la fin du script. Or, la redirection demande une nouvelle url en terminant le script en cours. La donnée présente dans le registre n'est donc pas transmise de page en page, contrairement à une session.
vg33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2007, 09h03   #9
Membre chevronné
 
Avatar de haltabush
 
Développeur Web
Inscription : avril 2005
Messages : 726
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : avril 2005
Messages : 726
Points : 790
Points : 790
Ok j'ai compris
En fait, le Registry ne permet pas grand chose, finalement; c'est simplement un autre genre de variable globale? Enfin on va pas troller sur un sujet sérieux, je me renseignerais ^^
__________________
HADOPI : black-out du net!
haltabush est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2007, 09h11   #10
Membre Expert
 
Inscription : janvier 2005
Messages : 1 249
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2005
Messages : 1 249
Points : 1 417
Points : 1 417
C'est en effet une alternative aux variables globales, comme indiqué dans la doc. C'est une implémentation du design pattern registry.
vg33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2007, 09h41   #11
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
Citation:
Envoyé par vg33
Personnellement, je ne suis pas pour le passage d'un message en GET. C'est pas propre du tout, un user peut afficher n'importe quoi en changeant le GET, et c'est potentiellement une faille XSS (soit directement si tu n'échappes pas la donnée, soit indirectement par affichage d'un message non désiré).
je suis tout a fait d'accord si on passe le message en GET
je te propose plutôt de passer un code du message par exemple http://serveur/module/controller/action/message/clientEnregistre ou .../message/imageTropGrande

ensuite dans la vue tu testes si le code du message est "clientEnregistre" tu affiches "Les informations du client ont bien été enregistrées". Tu peux même l'afficher dans une autre langue sans changer l'URL donc là dans cet exemple on voit bien les différentes séparations : le contrôleur envoie le code du message et c'est la vue qui s'occupe de l'affichage, la couleur, la langue, etc.
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2007, 09h45   #12
Candidat au titre de Membre du Club
 
Inscription : mai 2005
Messages : 127
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 127
Points : 10
Points : 10
Merci encore pour toutes vos réponses.

Donc j'ai utilisé les sessions de Zend. Je mets le code meme si c'est simple on ne sait jamais si ca peut aider quelqu'un.

Dans le controlleur avant la redirection :
Code :
1
2
3
4
5
6
Zend_Loader::loadClass('Zend_Session_Namespace');
 
$defaultNamespace = new Zend_Session_Namespace('Login');
$defaultNamespace->myKey = $message;
 
$this->_redirect('/');
Dans le controlleur qui reçoit la redirection :
Code :
1
2
3
4
5
6
Zend_Loader::loadClass('Zend_Session_Namespace');
 
$defaultNamespace = new Zend_Session_Namespace('Login');
$this->view->message = $defaultNamespace->myKey;
 
$this->render();
Voila maintenant je vais regarder comment supprimer cette session apres usage.

Merci
branqueira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2007, 10h04   #13
Membre Expert
 
Inscription : janvier 2005
Messages : 1 249
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2005
Messages : 1 249
Points : 1 417
Points : 1 417
Citation:
Envoyé par branqueira
Voila maintenant je vais regarder comment supprimer cette session apres usage.
Tu ne supprimes pas la session, mais $defaultNamespace->myKey.
vg33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2007, 10h06   #14
Candidat au titre de Membre du Club
 
Inscription : mai 2005
Messages : 127
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 127
Points : 10
Points : 10
ah ok ok

et il y a une méthode pour ou je fais un classic

Code :
$defaultNamespace = null;
branqueira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2007, 10h08   #15
Membre Expert
 
Inscription : janvier 2005
Messages : 1 249
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2005
Messages : 1 249
Points : 1 417
Points : 1 417
Citation:
Envoyé par branqueira
ah ok ok

et il y a une méthode pour ou je fais un classic

Code :
$defaultNamespace = null;
Plutôt :
Code :
$defaultNamespace->myKey = null;
vg33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2007, 10h17   #16
Candidat au titre de Membre du Club
 
Inscription : mai 2005
Messages : 127
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 127
Points : 10
Points : 10
ah ouais ?

si on fait :

Code :
$defaultNamespace->myKey = null;
on supprime que la valeur myKey de l'objet $defaultNamespace

par contre si on fait :
Code :
$defaultNamespace = null;
on supprime l'objet...

peut etre je dis une connerie la ou je me trompe de langage
branqueira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2007, 10h23   #17
Membre Expert
 
Inscription : janvier 2005
Messages : 1 249
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2005
Messages : 1 249
Points : 1 417
Points : 1 417
C'est parfaitement juste. Mais pourquoi détruire toute la session plutôt que simplement le message ?
vg33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2007, 10h31   #18
Candidat au titre de Membre du Club
 
Inscription : mai 2005
Messages : 127
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 127
Points : 10
Points : 10
Quand je recupere cette variable, je suis presque à la page d'accueil, donc je n'ai encore aucune information à garder, à part cette variable et je n'utilise pas d'autres variables.

Donc je n'ai absolument plus besoin de session (je suis encore dans le IndexControleur)

De toute facon, dans un autre controleur, je pourrai réouvrir une session (j'espere ne pas avoir dit de connerie)
branqueira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2007, 11h21   #19
Candidat au titre de Membre du Club
 
Inscription : mai 2005
Messages : 127
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 127
Points : 10
Points : 10
Euh, je viens de remarquer quelque chose.

Si je relance ma page qui reçoit :
Code :
1
2
3
4
5
6
Zend_Loader::loadClass('Zend_Session_Namespace');
 
$defaultNamespace = new Zend_Session_Namespace('Login');
$this->view->message = $defaultNamespace->myKey;
 
$this->render();
Je récupere toujours la variable même si je venais pas de la redirection.

Donc la solution c'est de mettre cela :

Code :
1
2
3
4
5
6
7
Zend_Loader::loadClass('Zend_Session_Namespace');
 
$defaultNamespace = new Zend_Session_Namespace('Login');
$this->view->message = $defaultNamespace->myKey;
$defaultNamespace->setExpirationSeconds(1, "myKey");
 
$this->render();
Comme ca, si je ne viens pas de la redirection, je ne récupere pas la variable, vu qu'elle n'existe plus.
branqueira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2007, 19h39   #20
Membre Expert
 
Inscription : janvier 2005
Messages : 1 249
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2005
Messages : 1 249
Points : 1 417
Points : 1 417
C'est normal. C'est pour cela que tu dois détruire la session ou la variable myKey juste après l'avoir affectée à la vue.
vg33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



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


 
 
 
 
Partenaires

Hébergement Web