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程序设计有所帮助。