当前位置:首页 > CMS教程 > 其它CMS > 列表

Zend Framework动作助手FlashMessenger用法详解

发布:smiling 来源: PHP粉丝网  添加日期:2021-07-13 14:41:09 浏览: 评论:0 

这篇文章主要介绍了Zend Framework动作助手FlashMessenger用法,分析了动作助手FlashMessenger的功能,并结合实例形式演示了FlashMessenger的使用技巧,需要的朋友可以参考下。

本文实例讲述了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

  1. <?php 
  2. class UserController extends Zend_Controller_Action 
  3.   protected $_flashMessenger = null; 
  4.   public function init() 
  5.   { 
  6.     $this->_flashMessenger = 
  7.     $this->_helper->getHelper('FlashMessenger'); 
  8.     $this->initView(); 
  9.   } 
  10.   public function registerAction() 
  11.   { 
  12.     $this->_flashMessenger->addMessage('xxxxx,Welcome!'); 
  13.     $this->_helper->redirector('regtips'); 
  14.   } 
  15.   public function regtipsAction() 
  16.   { 
  17.     $this->view->messages = $this->_flashMessenger->getMessages(); 
  18.   } 

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

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

访问http://www.localzend.com/helper_demo1/public/user/register

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

FlashMessager实现源码如下

  1. <?php 
  2. /** 
  3.  * Zend Framework 
  4.  * 
  5.  * LICENSE 
  6.  * 
  7.  * This source file is subject to the new BSD license that is bundled 
  8.  * with this package in the file LICENSE.txt. 
  9.  * It is also available through the world-wide-web at this URL: 
  10.  * http://framework.zend.com/license/new-bsd 
  11.  * If you did not receive a copy of the license and are unable to 
  12.  * obtain it through the world-wide-web, please send an email 
  13.  * to license@zend.com so we can send you a copy immediately. 
  14.  * 
  15.  * @category  Zend 
  16.  * @package  Zend_Controller 
  17.  * @subpackage Zend_Controller_Action_Helper 
  18.  * @copyright Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com) 
  19.  * @license  http://framework.zend.com/license/new-bsd   New BSD License 
  20.  */ 
  21. /** 
  22.  * @see Zend_Session 
  23.  */ 
  24. require_once 'Zend/Session.php'
  25. /** 
  26.  * @see Zend_Controller_Action_Helper_Abstract 
  27.  */ 
  28. require_once 'Zend/Controller/Action/Helper/Abstract.php'
  29. /** 
  30.  * Flash Messenger - implement session-based messages 
  31.  * 
  32.  * @uses    Zend_Controller_Action_Helper_Abstract 
  33.  * @category  Zend 
  34.  * @package  Zend_Controller 
  35.  * @subpackage Zend_Controller_Action_Helper 
  36.  * @copyright Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com) 
  37.  * @license  http://framework.zend.com/license/new-bsd   New BSD License 
  38.  * @version  $Id: FlashMessenger.php 23775 2011-03-01 17:25:24Z ralph $ 
  39.  */ 
  40. class Zend_Controller_Action_Helper_FlashMessenger extends Zend_Controller_Action_Helper_Abstract implements IteratorAggregate, Countable 
  41.   /** 
  42.    * $_messages - Messages from previous request 
  43.    * 
  44.    * @var array 
  45.    */ 
  46.   static protected $_messages = array(); 
  47.   /** 
  48.    * $_session - Zend_Session storage object 
  49.    * 
  50.    * @var Zend_Session 
  51.    */ 
  52.   static protected $_session = null; 
  53.   /** 
  54.    * $_messageAdded - Wether a message has been previously added 
  55.    * 
  56.    * @var boolean 
  57.    */ 
  58.   static protected $_messageAdded = false; 
  59.   /** 
  60.    * $_namespace - Instance namespace, default is 'default' 
  61.    * 
  62.    * @var string 
  63.    */ 
  64.   protected $_namespace = 'default'
  65.   /** 
  66.    * __construct() - Instance constructor, needed to get iterators, etc 
  67.    * 
  68.    * @param string $namespace 
  69.    * @return void 
  70.    */ 
  71.   public function __construct() 
  72.   { 
  73.     if (!self::$_session instanceof Zend_Session_Namespace) { 
  74.       self::$_session = new Zend_Session_Namespace($this->getName()); 
  75.       foreach (self::$_session as $namespace => $messages) { 
  76.         self::$_messages[$namespace] = $messages
  77.         unset(self::$_session->{$namespace}); 
  78.       } 
  79.     } 
  80.   } 
  81.   /** 
  82.    * postDispatch() - runs after action is dispatched, in this 
  83.    * case, it is resetting the namespace in case we have forwarded to a different 
  84.    * action, Flashmessage will be 'clean' (default namespace) 
  85.    * 
  86.    * @return Zend_Controller_Action_Helper_FlashMessenger Provides a fluent interface 
  87.    */ 
  88.   public function postDispatch() 
  89.   { 
  90.     $this->resetNamespace(); 
  91.     return $this
  92.   } 
  93.   /** 
  94.    * setNamespace() - change the namespace messages are added to, useful for 
  95.    * per action controller messaging between requests 
  96.    * 
  97.    * @param string $namespace 
  98.    * @return Zend_Controller_Action_Helper_FlashMessenger Provides a fluent interface 
  99.    */ 
  100.   public function setNamespace($namespace = 'default'
  101.   { 
  102.     $this->_namespace = $namespace
  103.     return $this
  104.   } 
  105.   /** 
  106.    * resetNamespace() - reset the namespace to the default 
  107.    * 
  108.    * @return Zend_Controller_Action_Helper_FlashMessenger Provides a fluent interface 
  109.    */ 
  110.   public function resetNamespace() 
  111.   { 
  112.     $this->setNamespace(); 
  113.     return $this
  114.   } 
  115.   /** 
  116.    * addMessage() - Add a message to flash message 
  117.    * 
  118.    * @param string $message 
  119.    * @return Zend_Controller_Action_Helper_FlashMessenger Provides a fluent interface 
  120.    */ 
  121.   public function addMessage($message
  122.   { 
  123.     if (self::$_messageAdded === false) { 
  124.       self::$_session->setExpirationHops(1, null, true); 
  125.     } 
  126.     if (!is_array(self::$_session->{$this->_namespace})) { 
  127.       self::$_session->{$this->_namespace} = array(); 
  128.     } 
  129.     self::$_session->{$this->_namespace}[] = $message
  130.     return $this
  131.   } 
  132.   /** 
  133.    * hasMessages() - Wether a specific namespace has messages 
  134.    * 
  135.    * @return boolean 
  136.    */ 
  137.   public function hasMessages() 
  138.   { 
  139.     return isset(self::$_messages[$this->_namespace]); 
  140.   } 
  141.   /** 
  142.    * getMessages() - Get messages from a specific namespace 
  143.    * 
  144.    * @return array 
  145.    */ 
  146.   public function getMessages() 
  147.   { 
  148.     if ($this->hasMessages()) { 
  149.       return self::$_messages[$this->_namespace]; 
  150.     } 
  151.     return array(); 
  152.   } 
  153.   /** 
  154.    * Clear all messages from the previous request & current namespace 
  155.    * 
  156.    * @return boolean True if messages were cleared, false if none existed 
  157.    */ 
  158.   public function clearMessages() 
  159.   { 
  160.     if ($this->hasMessages()) { 
  161.       unset(self::$_messages[$this->_namespace]); 
  162.       return true; 
  163.     } 
  164.     return false; 
  165.   } 
  166.   /** 
  167.    * hasCurrentMessages() - check to see if messages have been added to current 
  168.    * namespace within this request 
  169.    * 
  170.    * @return boolean 
  171.    */ 
  172.   public function hasCurrentMessages() 
  173.   { 
  174.     return isset(self::$_session->{$this->_namespace}); 
  175.   } 
  176.   /** 
  177.    * getCurrentMessages() - get messages that have been added to the current 
  178.    * namespace within this request 
  179.    * 
  180.    * @return array 
  181.    */ 
  182.   public function getCurrentMessages() 
  183.   { 
  184.     if ($this->hasCurrentMessages()) { 
  185.       return self::$_session->{$this->_namespace}; 
  186.     } 
  187.     return array(); 
  188.   } 
  189.   /** 
  190.    * clear messages from the current request & current namespace 
  191.    * 
  192.    * @return boolean 
  193.    */ 
  194.   public function clearCurrentMessages() 
  195.   { 
  196.     if ($this->hasCurrentMessages()) { 
  197.       unset(self::$_session->{$this->_namespace}); 
  198.       return true; 
  199.     } 
  200.     return false; 
  201.   } 
  202.   /** 
  203.    * getIterator() - complete the IteratorAggregate interface, for iterating 
  204.    * 
  205.    * @return ArrayObject 
  206.    */ 
  207.   public function getIterator() 
  208.   { 
  209.     if ($this->hasMessages()) { 
  210.       return new ArrayObject($this->getMessages()); 
  211.     } 
  212.     return new ArrayObject(); 
  213.   } 
  214.   /** 
  215.    * count() - Complete the countable interface 
  216.    * 
  217.    * @return int 
  218.    */ 
  219.   public function count() 
  220.   { 
  221.     if ($this->hasMessages()) { 
  222.       return count($this->getMessages()); 
  223.     } 
  224.     return 0; 
  225.   } 
  226.   /** 
  227.    * Strategy pattern: proxy to addMessage() 
  228.    * 
  229.    * @param string $message 
  230.    * @return void 
  231.    */ 
  232.   public function direct($message
  233.   { 
  234.     return $this->addMessage($message); 
  235.   } 
  236. }

Tags: Framework FlashMessenger

分享到: