Zend Framework动作助手FlashMessenger用法详解

5年以前  |  阅读数:874 次  |  编程语言:PHP 

本文实例讲述了Zend Framework动作助手FlashMessenger用法。分享给大家供大家参考,具体如下:

FlashMessenger 用来处理Flash Messenger会话;FlashMessenger是一个神奇的助手。

有这么一种场景,在用户注册成功后,需要在提示页面上显示用户的名称,如果不通过get传递请求,当然你也可以通过session传递

要显示的用户名称。但是seesion的操作难免复杂,可以使用Flash Messenger快速的实现这个需求。

FlashMessenger助手允许你传递用户可能需要在下个请求看到的消息。

FlashMessenger也是使用Zend_Session_Namespace来存储消息以备将来或下个请求来读取,但是相对简单一些。

FlashMessenger简单用法

在helper_demo1项目的基础上

新增/helper_demo1/application/controllers/UserController.php


    <?php
    class UserController extends Zend_Controller_Action
    {
      protected $_flashMessenger = null;
      public function init()
      {
        $this->_flashMessenger =
        $this->_helper->getHelper('FlashMessenger');
        $this->initView();
      }
      public function registerAction()
      {
        $this->_flashMessenger->addMessage('xxxxx,Welcome!');
        $this->_helper->redirector('regtips');
      }
      public function regtipsAction()
      {
        $this->view->messages = $this->_flashMessenger->getMessages();
      }
    }

新增/helper_demo1/application/views/scripts/user/regtips.phtml


    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>test</title>
    </head>
    <body>
    <?php
    var_dump($this->messages);
    ?>
    </body>
    </html>

访问http://www.localzend.com/helper_demo1/public/user/register
跳转到http://www.localzend.com/helper_demo1/public/user/regtips

FlashMessager实现源码如下


    <?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-2011 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-2011 Zend Technologies USA Inc. (http://www.zend.com)
     * @license  http://framework.zend.com/license/new-bsd   New BSD License
     * @version  $Id: FlashMessenger.php 23775 2011-03-01 17:25:24Z ralph $
     */
    class Zend_Controller_Action_Helper_FlashMessenger extends Zend_Controller_Action_Helper_Abstract implements IteratorAggregate, Countable
    {
      /**
       * $_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
       * @return Zend_Controller_Action_Helper_FlashMessenger Provides a fluent interface
       */
      public function addMessage($message)
      {
        if (self::$_messageAdded === false) {
          self::$_session->setExpirationHops(1, null, true);
        }
        if (!is_array(self::$_session->{$this->_namespace})) {
          self::$_session->{$this->_namespace} = array();
        }
        self::$_session->{$this->_namespace}[] = $message;
        return $this;
      }
      /**
       * 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);
      }
    }

更多关于zend相关内容感兴趣的读者可查看本站专题:《Zend FrameWork框架入门教程》、《php优秀开发框架总结》、《Yii框架入门及常用技巧总结》、《ThinkPHP入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总

希望本文所述对大家PHP程序设计有所帮助。

 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例