Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjours à tous
dans les dernières version de ZF on trouve un composant qui faisait défaut dans les premières versions. bien avant ZF j'avais avec un collègue (lemoineau) développé ce composant. il s'agit du messager.
j'ai donc regardé de plus près ce que nous propose ZF et si nous n'avions pas fait de helpper notre version était très semblable à celle de ZF à un petit détail près.
Je propose donc d'intégrer au futures version de ZF cet élément manquant. dans notre messager les message sont typés (ERREUR WARNING OK NORMAL NOTICE) le développer pouvant ajouter ses propre types
dans FlashMessenger les messages sont de simple chaîne.
la modification que je propose ajoute le type et reste compatible au niveau du code avec la version ZF existante.
seule les vues doivent être adaptées. dans la version ZF la variable contenant les messages dans la vue est un tableau de string dans ce que je propose c'est un tableau d'objets avec un membre text et un membre type.
pour ceux qui voudrait voir à qui ça ressemble dans la version Zend je vous conseille de lire
http://framework.zend.com/manual/en/zen … hmessenger
voici une version modifiée prenant en compte le typage vous pouvez utiliser les exemples de Zend pour la faire fonctionner
<?php /** * Zend Framework * * LICENSE * * This source file is subject to the new BSD license that is bundled * with this package in the file LICENSE.txt. * It is also available through the world-wide-web at this URL: * http://framework.zend.com/license/new-bsd * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to license@zend.com so we can send you a copy immediately. * * @category Zend * @package Zend_Controller * @subpackage Zend_Controller_Action_Helper * @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License */ /** * @see Zend_Session */ require_once 'Zend/Session.php'; /** * @see Zend_Controller_Action_Helper_Abstract */ require_once 'Zend/Controller/Action/Helper/Abstract.php'; /** * Flash Messenger - implement session-based messages * * @uses Zend_Controller_Action_Helper_Abstract * @category Zend * @package Zend_Controller * @subpackage Zend_Controller_Action_Helper * @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License * @version $Id: $ */ class Zend_Controller_Action_Helper_FlashMessenger extends Zend_Controller_Action_Helper_Abstract implements IteratorAggregate, Countable { /** * * Types of messages * Added by sekajin * */ const NORMAL = 'NORMAL'; const NOTICE = 'NOTICE'; const WARNING = 'WARNING'; const ERROR = 'ERROR'; const OK = 'OK'; /** * $_messages - Messages from previous request * * @var array */ static protected $_messages = array(); /** * $_session - Zend_Session storage object * * @var Zend_Session */ static protected $_session = null; /** * $_messageAdded - Wether a message has been previously added * * @var boolean */ static protected $_messageAdded = false; /** * $_namespace - Instance namespace, default is 'default' * * @var string */ protected $_namespace = 'default'; /** * __construct() - Instance constructor, needed to get iterators, etc * * @param string $namespace * @return void */ public function __construct() { if (!self::$_session instanceof Zend_Session_Namespace) { self::$_session = new Zend_Session_Namespace($this->getName()); foreach (self::$_session as $namespace => $messages) { self::$_messages[$namespace] = $messages; unset(self::$_session->{$namespace}); } } } /** * postDispatch() - runs after action is dispatched, in this * case, it is resetting the namespace in case we have forwarded to a different * action, Flashmessage will be 'clean' (default namespace) * * @return Zend_Controller_Action_Helper_FlashMessenger Provides a fluent interface */ public function postDispatch() { $this->resetNamespace(); return $this; } /** * setNamespace() - change the namespace messages are added to, useful for * per action controller messaging between requests * * @param string $namespace * @return Zend_Controller_Action_Helper_FlashMessenger Provides a fluent interface */ public function setNamespace($namespace = 'default') { $this->_namespace = $namespace; return $this; } /** * resetNamespace() - reset the namespace to the default * * @return Zend_Controller_Action_Helper_FlashMessenger Provides a fluent interface */ public function resetNamespace() { $this->setNamespace(); return $this; } /** * addMessage() - Add a message to flash message * * @param string $message * Added by sekajin * @param string $type Type of message (Messenger::NORMAL, Messenger::NOTICE, * Messenger::WARNING, Messenger::ERROR, Messenger::OK) * @return Zend_Controller_Action_Helper_FlashMessenger Provides a fluent interface */ public function addMessage($message, $type=self::NORMAL) { if (self::$_messageAdded === false) { self::$_session->setExpirationHops(1, null, true); } if (!is_array(self::$_session->{$this->_namespace})) { self::$_session->{$this->_namespace} = array(); } // Added by sekajin $obj = new StdClass(); $obj->text = $message; $obj->type = $type; $this->_messages[] = $obj; self::$_session->{$this->_namespace}[] = $obj; return $this; } /** * Added by sekajin * addNormal() - Add a NORMAL message to flash message * * @param string $message * @return Zend_Controller_Action_Helper_FlashMessenger Provides a fluent interface * see addMessage() */ public function addNormal($msg) { $this->add($msg, self::NORMAL); } /** * Added by sekajin * addOk() - Add a OK message to flash message * * @param string $message * @return Zend_Controller_Action_Helper_FlashMessenger Provides a fluent interface * see addMessage() */ public function addOk($msg) { $this->add($msg, self::OK); } /** * Added by sekajin * addNotice() - Add a NOTICE message to flash message * * @param string $message * @return Zend_Controller_Action_Helper_FlashMessenger Provides a fluent interface * see addMessage() */ public function addNotice($msg) { $this->add($msg, self::NOTICE); } /** * Added by sekajin * addWarning() - Add a WARNING message to flash message * * @param string $message * @return Zend_Controller_Action_Helper_FlashMessenger Provides a fluent interface * see addMessage() */ public function addWarning($msg) { $this->add($msg, self::WARNING); } /** * Added by sekajin * addError() - Add a ERROR message to flash message * * @param string $message * @return Zend_Controller_Action_Helper_FlashMessenger Provides a fluent interface * see addMessage() */ public function addError($msg) { $this->add($msg, self::ERROR); } /** * hasMessages() - Wether a specific namespace has messages * * @return boolean */ public function hasMessages() { return isset(self::$_messages[$this->_namespace]); } /** * getMessages() - Get messages from a specific namespace * * @return array */ public function getMessages() { if ($this->hasMessages()) { return self::$_messages[$this->_namespace]; } return array(); } /** * Clear all messages from the previous request & current namespace * * @return boolean True if messages were cleared, false if none existed */ public function clearMessages() { if ($this->hasMessages()) { unset(self::$_messages[$this->_namespace]); return true; } return false; } /** * hasCurrentMessages() - check to see if messages have been added to current * namespace within this request * * @return boolean */ public function hasCurrentMessages() { return isset(self::$_session->{$this->_namespace}); } /** * getCurrentMessages() - get messages that have been added to the current * namespace within this request * * @return array */ public function getCurrentMessages() { if ($this->hasCurrentMessages()) { return self::$_session->{$this->_namespace}; } return array(); } /** * clear messages from the current request & current namespace * * @return boolean */ public function clearCurrentMessages() { if ($this->hasCurrentMessages()) { unset(self::$_session->{$this->_namespace}); return true; } return false; } /** * getIterator() - complete the IteratorAggregate interface, for iterating * * @return ArrayObject */ public function getIterator() { if ($this->hasMessages()) { return new ArrayObject($this->getMessages()); } return new ArrayObject(); } /** * count() - Complete the countable interface * * @return int */ public function count() { if ($this->hasMessages()) { return count($this->getMessages()); } return 0; } /** * Strategy pattern: proxy to addMessage() * * @param string $message * @return void */ public function direct($message) { return $this->addMessage($message); } }
la méthode addMessage prends un deuxième argument optionnel le type une chaîne par défaut c'est NORMAL
les méthodes addNormal addOk addNotice addWarning addError sont des alias de addMessages avec un autre type pré-défini
pour ajouter son propre type il suffit de faire
$this->_flashMessenger->addMessage('Record Saved!', 'MY_TYPE_OF_MSG');
A+JYT
Hors ligne
Heu, Mr Sekaijin...
Tu appelles dans les méthodes d'alias la méthode add() mais je la vois pas dans le code...
Peut-être l'effet d'un copié/collé depuis un certain Messenger que nous avions en commun ;-)).
Je pense donc qu'il faudrait écrire par exemple :
public function addNormal($msg) { $this->addMessage($msg, self::NORMAL); }
De plus les méthodes d'alias ne retournent rien, l'interface n'est donc plus fluide, alors je verrais bien :
public function addNormal($msg) { return $this->addMessage($msg, self::NORMAL); }
Dernière modification par MoineauDeParis (31-03-2009 11:29:36)
Hors ligne
vi
oops
j'ai pas posté la version que j'ai testé car j'avais eu l'erreur
A+
Hors ligne