本文实例讲述了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
<?phpclass 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><?phpvar_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. * * @categoryZend * @packageZend_Controller * @subpackage Zend_Controller_Action_Helper * @copyright Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com) * @licensehttp://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 * * @usesZend_Controller_Action_Helper_Abstract * @categoryZend * @packageZend_Controller * @subpackage Zend_Controller_Action_Helper * @copyright Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com) * @licensehttp://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程序设计有所帮助。