2010-11-01 16 views
0

Ok, je sais ce que je vais dire va être super vague, mais écoutez-moi:Problèmes avec GetFlash et setFlash dans Yii

Je veux utiliser des messages flash parce que j'aime l'idée de les , mais ils ne semblent pas toujours travailler pour moi.

Voici mon flux de travail: "Le succès"

  1. utilisateur crée un groupe à la page A
  2. J'envoie une notification par e-mail à membres du nouveau groupe
  3. J'ai mis le message flash
  4. Je redirige l'utilisateur vers le groupe nouvellement créé et affiche le "succès!" message flash.

Le problème est qu'après avoir redirigé l'utilisateur, les messages flash ne sont plus dans le $ _SESSION. Pour rendre cela encore plus étrange, si je sors l'étape où j'envoie des notifications par email, ça marche. WTF?

Est-ce que quelqu'un d'autre a rencontré des problèmes similaires avec les messages flash? Est-ce que quelqu'un a un aperçu de pourquoi l'envoi de l'e-mail aurait une incidence sur les messages flash?

Je pense qu'à ce stade, je vais simplement m'en tenir à setState et le retirer manuellement après les avoir affichés.

Répondre

0

Comment l'e-mail est-il envoyé? Je sais que l'utilisation de l'extension Yii Mail (un wrapper Swiftmailer je pense) en mode "debug" utilise la méthode setFlash, alors peut-être que cela efface le tableau en quelque sorte ...? Les variables "flash" sont mises à jour par la méthode init() de CWebUser, donc s'il y a un appel supplémentaire à CWebUser, il est possible que ce soit l'effacement des variables flash. Considérant que vous avez réglé le flash APRÈS l'email cependant, je ne suis pas sûr comment cela se produirait. Ma seule autre supposition en plus du mode "debug mode" (ce qui n'est pas un problème si vous utilisez simplement les méthodes de messagerie PHP) est que l'envoi de courrier déclenche une redirection supplémentaire quelque part.

Si vous avez un débogueur PHP comme XDebug installé, je définirais un point d'arrêt dans le code getFlash et setFlash et je verrais ce qui se passe de cette façon.

Bonne chance!

+0

merci pour la réponse. Oui, je l'ai essayé avec la fonction de courrier normal et ça ne marche toujours pas. Je l'ai essayé en mode debug et régulier sans aucune chance. J'ai vérifié le code source de toutes les méthodes que j'appelle, et aucun n'utilise getFlash. Je viens de créer mes propres fonctions getAlert() et setAlert() qui font essentiellement la même chose, et cela fonctionne très bien. Qui sait ce qui se passe ... –

+0

Donc, vous utilisez l'extension Mail? Parce qu'il appelle définitivement getFlash dans le widget MailDebug. Je vérifierais cela. Mais il semblerait que vous ayez une solution de contournement avec la fonction Alert, alors bon! Bravo – thaddeusmt

+0

J'utilise PHPMailer v5.0, le wrapper Yii pour ça. Est-ce ce dont vous parlez? Pas que ce soit important à ce stade. Je préfère ma solution de contournement de toute façon :) –

3

Maintenant Vous pouvez définir une propriété autoUpdateFlash du composant CWebUser sur false. Dans ce cas, le message flash ne sera supprimé qu'après utilisation.