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 :

Comment faire une redirection ponctuelle avec paramètre


Sujet :

MVC PHP

  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 141
    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.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2004
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 496
    Par défaut
    Salut,

    tu peux le faire en envoyant des variables par l'url (méthode GET).

  3. #3
    Membre très actif
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 141
    Par défaut
    oui en fesant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $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

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2004
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 496
    Par défaut
    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.

  5. #5
    Membre très actif
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 141
    Par défaut
    Bon ben ok,
    je pensais qu'il y avait une autre solution du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $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

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Par défaut
    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.

  7. #7
    Membre émérite Avatar de haltabush
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    726
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 726
    Par défaut
    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"...

  8. #8
    Membre Expert

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Par défaut
    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.

  9. #9
    Membre émérite Avatar de haltabush
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    726
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 726
    Par défaut
    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 ^^

  10. #10
    Membre Expert

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Par défaut
    C'est en effet une alternative aux variables globales, comme indiqué dans la doc. C'est une implémentation du design pattern registry.

  11. #11
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 698
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 698
    Par défaut
    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.

  12. #12
    Membre très actif
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 141
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  13. #13
    Membre Expert

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Par défaut
    Citation Envoyé par branqueira
    Voila maintenant je vais regarder comment supprimer cette session apres usage.
    Tu ne supprimes pas la session, mais $defaultNamespace->myKey.

  14. #14
    Membre très actif
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 141
    Par défaut
    ah ok ok

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $defaultNamespace = null;

  15. #15
    Membre Expert

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Par défaut
    Citation Envoyé par branqueira
    ah ok ok

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $defaultNamespace = null;
    Plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $defaultNamespace->myKey = null;

  16. #16
    Membre très actif
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 141
    Par défaut
    ah ouais ?

    si on fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $defaultNamespace->myKey = null;
    on supprime que la valeur myKey de l'objet $defaultNamespace

    par contre si on fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $defaultNamespace = null;
    on supprime l'objet...

    peut etre je dis une connerie la ou je me trompe de langage

  17. #17
    Membre Expert

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Par défaut
    C'est parfaitement juste. Mais pourquoi détruire toute la session plutôt que simplement le message ?

  18. #18
    Membre très actif
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 141
    Par défaut
    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)

  19. #19
    Membre très actif
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 141
    Par défaut
    Euh, je viens de remarquer quelque chose.

    Si je relance ma page qui reçoit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  20. #20
    Membre Expert

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Par défaut
    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.

Discussions similaires

  1. Réponses: 1
    Dernier message: 03/05/2006, 10h49
  2. Comment faire une requete liée avec une requete ?
    Par DavidDeTroyes dans le forum Requêtes
    Réponses: 4
    Dernier message: 18/04/2006, 13h18
  3. Comment faire une API Win32 avec C++ Builder
    Par Zerocool003 dans le forum C++Builder
    Réponses: 2
    Dernier message: 31/01/2006, 16h13
  4. Réponses: 10
    Dernier message: 30/06/2004, 13h00

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