Zend Framework动作助手FlashMessenger用法详解
本文实例讲述了ZendFramework动作助手FlashMessenger用法。分享给大家供大家参考,具体如下:
FlashMessenger用来处理FlashMessenger会话;FlashMessenger是一个神奇的助手。
有这么一种场景,在用户注册成功后,需要在提示页面上显示用户的名称,如果不通过get传递请求,当然你也可以通过session传递
要显示的用户名称。但是seesion的操作难免复杂,可以使用FlashMessenger快速的实现这个需求。
FlashMessenger助手允许你传递用户可能需要在下个请求看到的消息。
FlashMessenger也是使用Zend_Session_Namespace来存储消息以备将来或下个请求来读取,但是相对简单一些。
FlashMessenger简单用法:
在helper_demo1项目的基础上
新增/helper_demo1/application/controllers/UserController.php
<?php
classUserControllerextendsZend_Controller_Action
{
protected$_flashMessenger=null;
publicfunctioninit()
{
$this->_flashMessenger=
$this->_helper->getHelper('FlashMessenger');
$this->initView();
}
publicfunctionregisterAction()
{
$this->_flashMessenger->addMessage('xxxxx,Welcome!');
$this->_helper->redirector('regtips');
}
publicfunctionregtipsAction()
{
$this->view->messages=$this->_flashMessenger->getMessages();
}
}
新增/helper_demo1/application/views/scripts/user/regtips.phtml
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <metahttp-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
/**
*ZendFramework
*
*LICENSE
*
*ThissourcefileissubjecttothenewBSDlicensethatisbundled
*withthispackageinthefileLICENSE.txt.
*Itisalsoavailablethroughtheworld-wide-webatthisURL:
*http://framework.zend.com/license/new-bsd
*Ifyoudidnotreceiveacopyofthelicenseandareunableto
*obtainitthroughtheworld-wide-web,pleasesendanemail
*tolicense@zend.comsowecansendyouacopyimmediately.
*
*@categoryZend
*@packageZend_Controller
*@subpackageZend_Controller_Action_Helper
*@copyrightCopyright(c)2005-2011ZendTechnologiesUSAInc.(http://www.zend.com)
*@licensehttp://framework.zend.com/license/new-bsdNewBSDLicense
*/
/**
*@seeZend_Session
*/
require_once'Zend/Session.php';
/**
*@seeZend_Controller_Action_Helper_Abstract
*/
require_once'Zend/Controller/Action/Helper/Abstract.php';
/**
*FlashMessenger-implementsession-basedmessages
*
*@usesZend_Controller_Action_Helper_Abstract
*@categoryZend
*@packageZend_Controller
*@subpackageZend_Controller_Action_Helper
*@copyrightCopyright(c)2005-2011ZendTechnologiesUSAInc.(http://www.zend.com)
*@licensehttp://framework.zend.com/license/new-bsdNewBSDLicense
*@version$Id:FlashMessenger.php237752011-03-0117:25:24Zralph$
*/
classZend_Controller_Action_Helper_FlashMessengerextendsZend_Controller_Action_Helper_AbstractimplementsIteratorAggregate,Countable
{
/**
*$_messages-Messagesfrompreviousrequest
*
*@vararray
*/
staticprotected$_messages=array();
/**
*$_session-Zend_Sessionstorageobject
*
*@varZend_Session
*/
staticprotected$_session=null;
/**
*$_messageAdded-Wetheramessagehasbeenpreviouslyadded
*
*@varboolean
*/
staticprotected$_messageAdded=false;
/**
*$_namespace-Instancenamespace,defaultis'default'
*
*@varstring
*/
protected$_namespace='default';
/**
*__construct()-Instanceconstructor,neededtogetiterators,etc
*
*@paramstring$namespace
*@returnvoid
*/
publicfunction__construct()
{
if(!self::$_sessioninstanceofZend_Session_Namespace){
self::$_session=newZend_Session_Namespace($this->getName());
foreach(self::$_sessionas$namespace=>$messages){
self::$_messages[$namespace]=$messages;
unset(self::$_session->{$namespace});
}
}
}
/**
*postDispatch()-runsafteractionisdispatched,inthis
*case,itisresettingthenamespaceincasewehaveforwardedtoadifferent
*action,Flashmessagewillbe'clean'(defaultnamespace)
*
*@returnZend_Controller_Action_Helper_FlashMessengerProvidesafluentinterface
*/
publicfunctionpostDispatch()
{
$this->resetNamespace();
return$this;
}
/**
*setNamespace()-changethenamespacemessagesareaddedto,usefulfor
*peractioncontrollermessagingbetweenrequests
*
*@paramstring$namespace
*@returnZend_Controller_Action_Helper_FlashMessengerProvidesafluentinterface
*/
publicfunctionsetNamespace($namespace='default')
{
$this->_namespace=$namespace;
return$this;
}
/**
*resetNamespace()-resetthenamespacetothedefault
*
*@returnZend_Controller_Action_Helper_FlashMessengerProvidesafluentinterface
*/
publicfunctionresetNamespace()
{
$this->setNamespace();
return$this;
}
/**
*addMessage()-Addamessagetoflashmessage
*
*@paramstring$message
*@returnZend_Controller_Action_Helper_FlashMessengerProvidesafluentinterface
*/
publicfunctionaddMessage($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()-Wetheraspecificnamespacehasmessages
*
*@returnboolean
*/
publicfunctionhasMessages()
{
returnisset(self::$_messages[$this->_namespace]);
}
/**
*getMessages()-Getmessagesfromaspecificnamespace
*
*@returnarray
*/
publicfunctiongetMessages()
{
if($this->hasMessages()){
returnself::$_messages[$this->_namespace];
}
returnarray();
}
/**
*Clearallmessagesfromthepreviousrequest¤tnamespace
*
*@returnbooleanTrueifmessageswerecleared,falseifnoneexisted
*/
publicfunctionclearMessages()
{
if($this->hasMessages()){
unset(self::$_messages[$this->_namespace]);
returntrue;
}
returnfalse;
}
/**
*hasCurrentMessages()-checktoseeifmessageshavebeenaddedtocurrent
*namespacewithinthisrequest
*
*@returnboolean
*/
publicfunctionhasCurrentMessages()
{
returnisset(self::$_session->{$this->_namespace});
}
/**
*getCurrentMessages()-getmessagesthathavebeenaddedtothecurrent
*namespacewithinthisrequest
*
*@returnarray
*/
publicfunctiongetCurrentMessages()
{
if($this->hasCurrentMessages()){
returnself::$_session->{$this->_namespace};
}
returnarray();
}
/**
*clearmessagesfromthecurrentrequest¤tnamespace
*
*@returnboolean
*/
publicfunctionclearCurrentMessages()
{
if($this->hasCurrentMessages()){
unset(self::$_session->{$this->_namespace});
returntrue;
}
returnfalse;
}
/**
*getIterator()-completetheIteratorAggregateinterface,foriterating
*
*@returnArrayObject
*/
publicfunctiongetIterator()
{
if($this->hasMessages()){
returnnewArrayObject($this->getMessages());
}
returnnewArrayObject();
}
/**
*count()-Completethecountableinterface
*
*@returnint
*/
publicfunctioncount()
{
if($this->hasMessages()){
returncount($this->getMessages());
}
return0;
}
/**
*Strategypattern:proxytoaddMessage()
*
*@paramstring$message
*@returnvoid
*/
publicfunctiondirect($message)
{
return$this->addMessage($message);
}
}
更多关于zend相关内容感兴趣的读者可查看本站专题:《ZendFrameWork框架入门教程》、《php优秀开发框架总结》、《Yii框架入门及常用技巧总结》、《ThinkPHP入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。