关于ZendFramework动作助手FlashMessenger的用法分析

关于ZendFramework动作助手FlashMessenger的用法分析

内容导读

收集整理的这篇技术教程文章主要介绍了关于ZendFramework动作助手FlashMessenger的用法分析,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含7464字,纯文字阅读大概需要11分钟

内容图文

这篇文章主要介绍了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

<?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. * * @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);
}}

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

关于Zend Framework中Zend_Config组件的用法

关于Zend Framework动作助手Url的用法

关于Zend Framework中Zend_Db_Table_Rowset的用法

以上就是关于Zend Framework动作助手FlashMessenger的用法分析的详细内容,更多请关注Gxl网其它相关文章!

内容总结

以上是为您收集整理的关于ZendFramework动作助手FlashMessenger的用法分析全部内容,希望文章能够帮你解决关于ZendFramework动作助手FlashMessenger的用法分析所遇到的程序开发问题。 如果觉得技术教程内容还不错,欢迎将网站推荐给程序员好友。

内容备注

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。


本文关键词:

联系我们

在线咨询:点击这里给我发消息

邮件:w420220301@qq.com