Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Le problème : les messages passés à FlashMessenger ne s'affichent pas la "première fois". Cela ressemeble à un problème de "pile" ou d'ordre d'exécution.
Par exemple, il faut que j'accède 2 fois à une action inconnue pour que s'affiche le message d'erreur.
Cela doit venir de redirections que j'effectue et de l'ordre d'exécution des étapes du MVC :
- depuis le plugin de gestion des ACL :
si la ressource n'existe pas : throw exception(' Ressource inconnue')
si je n'ai pas le droit d'accéder à la ressource, retour au login et message Flash
$request->setModuleName('default');
$request->setControllerName('login');
$request->setActionName('login');
$flashmessage = new Zend_Controller_Action_Helper_FlashMessenger ;
$flashmessage->addMessage('Accès réservé, vous devez être authentifié.');
- dans l'error controller :
suivant l'erreur rencontrée :
ex: case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION:
$this->_helper->FlashMessenger->addMessage("Action inconnue.");
$this->_forward('index', 'index', 'default');
break;
- ... et dans le Layout, j'affiche les messages Flash par :
$flash = new Zend_Controller_Action_Helper_FlashMessenger ;
if ($flash->hasMessages()){
echo "<div id=\"error-message\">"
. implode("<br />", $flash->getMessages()).
"</div>";
}
Avez-vous des idées ou des pistes ????
Jean
Dernière modification par jean (16-12-2008 16:50:29)
Hors ligne
Hello,
Dans ton code, entre ton plugin ACL et ton error controller, tu es dans la même requête donc c'est normal de ne pas récupérer les infos du flash messenger qui attend la requête suivante pour renvoyer les données. Dans un même contexte, tu peux utiliser le registre pour stocker ton message.
A+
Hors ligne
... donc si je comprends bien, le message Flash créé ne sera accessible qu'après la fin de la requête, c'est à dire APRES le rendu de la vue, du layout, des divers POST-xxx, etc. La requête SUIVANTE y accédera. C'est bien çà ?
Mais alors, à quoi sert Flash Messenger et quels sont les cas typiques d'utilisation ? Quel est ton avis ?
Hors ligne
J'ai essayé d'utiliser FlashMessenger.
J'ai l'impression que sa portée se limite au contrôleur en cours!
ça peut être une bêtise mais c'est ce que je pense!
Hors ligne
Hello,
Exemple d'utilisation: tu appelles une action qui doit émettre une redirection pour finir. Tu stockes un éventuel message dans Flash pour le récupérer dans la requête HTTP suivante, juste après la redirection.
La portée n'est pas limitée. On peut stocker le message dans un(e) module, contrôleur ou action, et le lire dans un(e) autre.
A+
Hors ligne
OK, merci, je vais utiliser prioritairement Zend_Registry pour passer les messages sans ces contraintes.
Jean
Dernière modification par jean (16-12-2008 16:50:42)
Hors ligne
jean a écrit:
OK, merci, je vais utiliser prioritairement Zend_Registry pour passer les messages sans ces contraintes.
Jean
Salut,
désolé de remonter ce vieux tropique.
Mais as-tu réussi à résoudre ce souci finalement ?
J'ai pratiquement la même chose que toi :
plugin de gestion des ACL :
if (!$this->_auth->hasIdentity()){ $module = self::FAIL_AUTH_MODULE; $controller = self::FAIL_AUTH_CONTROLLER; $action = self::FAIL_AUTH_ACTION; $flash = Zend_Controller_Action_HelperBroker::getStaticHelper('FlashMessenger'); $flash->addMessage('Veuillez vous logguer pour accéder à votre article'); } $request->setModuleName($module); $request->setControllerName($controller); $request->setActionName($action);
et sur le layout :
<div id="homeflashmessage"><?= $this->homeflashmessage ?></div>
Mais je n'ai rien qui s'affiche
edit : resolved. Je me suis planté dans $this->homesflashmessage -_-
Dernière modification par supertino7 (17-06-2009 17:46:44)
Hors ligne
Pages: 1