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 :

Fonctionnement de FlashMessenger ¿ [ZF 1.8]


Sujet :

MVC PHP

  1. #1
    Membre confirmé Avatar de kreatik
    Inscrit en
    Juin 2007
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 94
    Par défaut Fonctionnement de FlashMessenger ¿
    'soir,

    je n'arrive pas à faire fonctionner FlashMessenger, voici un exemple qui me renvoi un array vide (v1.8.2) :

    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
    21
    22
    23
    24
    25
    class testController extends Zend_Controller_Action
    {
       /**
         * @var Zend_Controller_Action_Helper_FlashMessenger
         */
        protected $_flashMessenger = null;
     
     
        public function init ()
        {
        	$this->_flashMessenger = $this->_helper->getHelper('FlashMessenger');
        }
     
        public function postDispatch(){
        	$this->view->messages2user = $this->_flashMessenger->getMessages();
        }
     
        public function avAction(){
        	$this->_helper->viewRenderer->setRender('index');
        	$this->_flashMessenger->addMessage('salut alors ça marche ce truc de merde !');
            $this->_redirect('/test/ap');
        }
        public function apAction(){
        	$this->_helper->viewRenderer->setRender('index');
        }
    Pour infos :
    - J'ai forcer le script de rendu index pour ne pas créer les autres, c'est juste un test.
    - Dans mon layout j'ai simplement inclus mon script msg2user.phtml qui contient la chose suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php Zend_Debug::dump($this->messages2user)?>

    Une idée ? Le but est de faire une petite classe pour gérer les message utilisateur et d'utiliser zend_registry pour les message a afficher dans l'action courante (sans redirection après affectation du message donc) mais on verra ça plus tard hein

  2. #2
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Bonjour,

    J'ai testé ton code en 1.7 et 1.8.2, et ça fonctionne...
    Tu n'as pas de message d'erreur ?
    Si tu remplaces '$this->_flashMessenger->getMessages();' par du texte, ton texte est affiché ?

  3. #3
    Membre confirmé Avatar de kreatik
    Inscrit en
    Juin 2007
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 94
    Par défaut
    Bonjour,

    oui oui avec un echo 'test'; dans le postDispatch avant le getmessages() 'test' s'affiche correctement.

    Tu arrives à afficher le 'salut alors ça marche ce ...' ?

    Dans le layout voila comment j'appele le fichier affichant les messages :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php echo $this->render('msgUser.phtml'); ?>

  4. #4
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Citation Envoyé par kreatik Voir le message
    oui oui avec un echo 'test'; dans le postDispatch avant le getmessages() 'test' s'affiche correctement.
    Et avec un $this->view->messages2user = 'test' ?

    Citation Envoyé par kreatik Voir le message
    Tu arrives à afficher le 'salut alors ça marche ce ...' ?
    Oui

    Citation Envoyé par kreatik Voir le message
    Dans le layout voila comment j'appele le fichier affichant les messages :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php echo $this->render('msgUser.phtml'); ?>
    Ca fonctionne toujours. Le problème doit être ailleurs... Est-ce que tu n'instancies bien qu'une fois le FlashMessenger ?

  5. #5
    Membre confirmé Avatar de kreatik
    Inscrit en
    Juin 2007
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 94
    Par défaut
    Citation Envoyé par Eusebe Voir le message
    Et avec un $this->view->messages2user = 'test' ?
    Cela fonctionne (string(4) "test")

    Le FlashMessenger est instancié dans le controller > init().

    voici le bootstrap :

    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
    21
    22
    23
    24
    25
    26
    27
    <?php
     
    class Bootstrap extends Zend_Application_Bootstrap_Bootstrap {
    	protected function _initAutoload() {
    		$moduleLoader = new Zend_Application_Module_Autoloader ( array ('namespace' => '', 'basePath' => APPLICATION_PATH ) );
    		return $moduleLoader;
    	}
    	function _initViewHelpers() {
    		$this->bootstrap ( 'layout' );
    		$layout = $this->getResource ( 'layout' );
    		$view = $layout->getView ();
    		$view->doctype ( 'XHTML1_STRICT' );
    		$view->headMeta ()->appendHttpEquiv ( 'Content-Type', 'text/html;charset=utf-8' );
    		$view->headTitle ()->setSeparator ( ' - ' );
    		$view->headTitle ( 'Ndes' );
    		Zend_Dojo::enableView($view);
     
    		// Init session
    		Zend_registry::set("session",new Zend_Session_Namespace('ndes'));
     
    		$container = new Zend_Navigation(array(
    		    array(
    		       ...
    		    );
    		$view->navigation($container);
    	}
    }
    Le htacces :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    # "active" PHP5
    SetEnv PHP_VER 5
     
    # Désactive le paramètre register_globals
    SetEnv REGISTER_GLOBALS 0
    # Désactive le paramètre magic_quotes_gcp
    SetEnv MAGIC_QUOTES 0
    # Désacrtive session.auto_start de PHP
    php_value session.auto_start 0


    edit : PHP 5.2.9-2

  6. #6
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Bizarre...

    le FlashMessenger stocke les messages dans les données de session. Quand on l'instancie, il récupères les messages et vide le contenu de la session qui le concerne. On va essayer de vérifier que les données de la session sont bien présentes lors de l'appel à l'action ap... Essaies en modifiant ton contrôleur test comme suit :
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    class testController extends Zend_Controller_Action
    {
       /**
         * @var Zend_Controller_Action_Helper_FlashMessenger
         */
        protected $_flashMessenger = null;
     
     
        public function init ()
        {
    //    	$this->_flashMessenger = $this->_helper->getHelper('FlashMessenger');
        }
     
        public function postDispatch(){
        	$this->view->messages2user = $this->_flashMessenger->getMessages();
        }
     
        public function avAction(){
        	$this->_helper->viewRenderer->setRender('index');
        	$this->_flashMessenger = $this->_helper->getHelper('FlashMessenger');
        	$this->_flashMessenger->addMessage('salut alors ça marche ce truc de merde !');
            $this->_redirect('/test/ap');
        }
        public function apAction(){
            Zend_Session::start();
            Zend_Debug::dump($_SESSION);
            exit;
        	$this->_helper->viewRenderer->setRender('index');
        }
    (j'ai commenté l'instanciation du FlashMessenger dans l'initialisation, je l'ai mise dans l'action av, et j'ai ajouté l'affichage du tableau de session dans ap)
    Est-ce que la session contient bien ton message ?

  7. #7
    Membre confirmé Avatar de kreatik
    Inscrit en
    Juin 2007
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 94
    Par défaut
    Résultat :


  8. #8
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Tu n'as pas de problèmes de sessions par ailleurs ?

    Essaie de mettre le dump de la session après l'ajout du message au FlashMessenger (dans l'action av). Et pendant qu'on y est ajoutes un dump de l'identifiant de session (Zend_Session::getId()). Il ne devrait pas changer.

  9. #9
    Membre confirmé Avatar de kreatik
    Inscrit en
    Juin 2007
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 94
    Par défaut
    L'id change quand je rafraichi la page...

    Le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        public function avAction ()
        {
        	$this->_helper->viewRenderer->setRender('index');
        	$this->_flashMessenger = $this->_helper->getHelper('FlashMessenger');
        	$this->_flashMessenger->addMessage('salut alors ça marche ce truc de merde !');
        	Zend_Debug::dump(Zend_Session::getId());
        	Zend_Debug::dump($_SESSION);
        	exit();
            $this->_redirect('/reservations/ap');
        }
    me retourne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    string(26) "gc42m4j9ejuqijsuhl1bt3tqd4"
     
    array(2) {
      ["__ZF"] => array(1) {
        ["FlashMessenger"] => array(1) {
          ["ENNH"] => int(1)
        }
      }
      ["FlashMessenger"] => array(1) {
        ["default"] => array(1) {
          [0] => string(41) "salut alors ça marche ce truc de merde !"
        }
      }
    }

  10. #10
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    C'est donc bien une perte de session entre les deux appels (ou l'initialisation d'un autre flashMessenger... pas de plugin ?)

    Est-ce que l'identifiant de session change ?
    Est-ce que tu as essayé avec plusieurs navigateurs (question bête : les cookies sont bien activés ?) ?
    Est-ce que tu utilises les sessions par ailleurs ?

  11. #11
    Membre confirmé Avatar de kreatik
    Inscrit en
    Juin 2007
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 94
    Par défaut
    Oui l'id de session change à chaque fois, le seul plugin que j'ai permet d'avoir un base url :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class Zend_View_Helper_BaseUrl {
    	function baseUrl() {
    		$fc = Zend_Controller_Front::getInstance ();
    		return $fc->getBaseUrl ();
    	}
    }
    J'avais oublié de préciser (et je ne sais pour quelle raison mais je testai cette page sous IE, avec firefox aucun pb, je vais checker la config de IE.

    En tout cas désolé pour la perte de temps

    Edit :

    IE7 : FAIL
    OPERA 9x : GOOD
    FIREFOX 3.0.10 : GOOD
    SAFARI 3.2.3 : FAIL

    Je me demande si ça vient pas de ma config apache car il est vrai que je n'arrive pas à m'authentifier sur les sites utilisant les sessions et ce seulement en local et avec ie et safari. Une idée ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    DocumentRoot "H:/Boulot/web/rep1/rep2/www"
     
    <VirtualHost 127.0.0.3>
    ServerName kk_challenge
    DocumentRoot H:/Boulot/web/rep1/rep2/www
    </VirtualHost>
    <Directory "H:/Boulot/web/rep1/rep2/www">
    Options Indexes FollowSymLinks
    AllowOverride all
    Allow from 127.0.0.3
    </Directory>

  12. #12
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Citation Envoyé par kreatik Voir le message
    J'avais oublié de préciser (et je ne sais pour quelle raison mais je testai cette page sous IE, avec firefox aucun pb, je vais checker la config de IE.

    En tout cas désolé pour la perte de temps
    Pas de problème, et reviens nous dire d'où ça venait précisément

    J'ai eu un cas similaire il y a pas si longtemps avec un site dont le domaine contenait un underscore... Ce qui ne plaisait pas du tout à IE qui n'enregistrait pas de cookie pour lui (alors que sous FF, aucun souci)...

    EDIT:
    Aparemment, c'est le même problème ! ServerName kk_challenge

  13. #13
    Membre confirmé Avatar de kreatik
    Inscrit en
    Juin 2007
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 94
    Par défaut
    Le underscrore dans le serverName arf les boules, je vais modifier tous ça et je reviens de confirmer !

    Edit : C'est bon c'était bien ça, j'en reviens pas ! merci beaucoup j'ai résolu deux pb d'un coup du coup !

    Edit 2 : tant que j'y suis, FlashMessenger peut être utilisé pour afficher les message sur l'action courante ?

  14. #14
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Citation Envoyé par kreatik Voir le message
    Edit 2 : tant que j'y suis, FlashMessenger peut être utilisé pour afficher les message sur l'action courante ?
    Je ne comprend pas bien ce que tu veux dire par là... Un petit exemple d'utilisation ?

  15. #15
    Membre confirmé Avatar de kreatik
    Inscrit en
    Juin 2007
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 94
    Par défaut
    Ba si j'ai bien compris, flasMessenger n'affiche le message qu'après une redirection, si je veux afficher un message exactement comme on a fait ci-dessus mais sans de redirect() ? c'est prévu pour ?

  16. #16
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Citation Envoyé par kreatik Voir le message
    Ba si j'ai bien compris, flasMessenger n'affiche le message qu'après une redirection, si je veux afficher un message exactement comme on a fait ci-dessus mais sans de redirect() ? c'est prévu pour ?
    Le FlashMessenger peut être utilisé dans une même requête, mais je n'en vois pas bien l'intérêt (et il n'est comme tu le dis pas prévu pour ça). Il me semble qu'utiliser d'autres composants serait plus judicieux (par exemple en ajoutant des paramètres dans l'objet de requête, ou en en utilisant le registre).

  17. #17
    Membre confirmé Avatar de kreatik
    Inscrit en
    Juin 2007
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 94
    Par défaut
    Je viens de faire quelques tests, et, le message ne s'affiche pas au premier coup mais après un rafraichissement de la page.

    C'est un peu dommage car le flashMessenger permet de gérer les messages et du coup si on veut envoyer un message dans l'action courante sans redirect ni refresh on dois utiliser par les exemple la registry. C'est un peu lours à gerer ouj alors je n'ai pas tout comrpis.

  18. #18
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Citation Envoyé par kreatik Voir le message
    Je viens de faire quelques tests, et, le message ne s'affiche pas au premier coup mais après un rafraichissement de la page.
    Ca doit fonctionner si tu instancies de nouveau le FlashMessenger (c'est à ce moment là qu'il récupère les messages)... ou sans le réinstancier si tu utilises la bonne méthode : getCurrentMessages(). Et il ne faut dans ce cas pas oublier de supprimer les messages après les avoir lu (clearCurrentMessages()).

  19. #19
    Membre confirmé Avatar de kreatik
    Inscrit en
    Juin 2007
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 94
    Par défaut
    J'ai essayé avec getCurrentMessages() mais le fonctionnement était le même il fallait que je rafraichisse la page pour voir mon message.

    Edit : Cela fonctionne en mettant dans le postDispatch() et ceci est normal aussi en même temps.

    Double résolu ! Fini pour aujourd'hui je aprs à la plage, merci encore

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 16/06/2003, 16h51
  2. Réponses: 5
    Dernier message: 14/05/2003, 14h51
  3. [Turbo Pascal] TP7 fonctionne en QWERTY
    Par callahan dans le forum Turbo Pascal
    Réponses: 9
    Dernier message: 08/02/2003, 21h49
  4. Prb de fonctionnement dans SaveDialog avecInitialDir
    Par boyerf dans le forum Composants VCL
    Réponses: 4
    Dernier message: 12/12/2002, 21h46
  5. ca ne fonctionne pas (generateur auto-incrémentant)
    Par tripper.dim dans le forum SQL
    Réponses: 7
    Dernier message: 26/11/2002, 00h10

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