Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 14-03-2009 15:54:25

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Zend_Controller_Action_Helper_FlashMessenger

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

Code:

<?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

Code:

$this->_flashMessenger->addMessage('Record Saved!', 'MY_TYPE_OF_MSG');

A+JYT

Hors ligne

 

#2 30-03-2009 16:16:01

MoineauDeParis
Nouveau membre
Lieu: Paris
Date d'inscription: 09-03-2009
Messages: 7
Site web

Re: Zend_Controller_Action_Helper_FlashMessenger

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 :

Code:

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 :

Code:

public function addNormal($msg)
{    
    return $this->addMessage($msg, self::NORMAL);
}

Dernière modification par MoineauDeParis (31-03-2009 11:29:36)

Hors ligne

 

#3 31-03-2009 09:59:21

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: Zend_Controller_Action_Helper_FlashMessenger

vi

oops
j'ai pas posté la version que j'ai testé car j'avais eu l'erreur
A+

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages