热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在Kohana3中实现最优的“即时消息”显示方法-BestPracticesforDisplaying'FlashMessages'inKohana3

在Kohana3框架中,实现最优的即时消息显示方法是许多开发者关注的问题。本文将探讨如何高效、优雅地展示flash消息,包括最佳实践和技术细节,以提升用户体验和代码可维护性。

I would like to know the best way to display flash messages in Kohana v3?

我想知道在Kohana v3中显示flash消息的最佳方法吗?

Some tutorials or examples would be helpful.

一些教程或示例会有所帮助。

5 个解决方案

#1


22  

Do you mean like Kohana 2.x's flash session variables?

你的意思是像Kohana 2.x的flash会话变量吗?

The latest Kohana supports get_once() which is pretty similar to the old flash session variables.

最新的Kohana支持get_once(),它与旧的flash会话变量非常相似。

$session = Session::instance();

$session->set('test', 'Hello, World!');

// The session variable is returned and removed.
$test = $session->get_once('test');

#2


2  

I think the get_once is a great function, but what if you want to keep the data actually separate from the regular data, here's a basic class that overloads "Session" so that you can use "codeigniter" style flashdata calls with any data-store.

我认为get_once是一个很棒的函数,但是如果你想让数据实际上与常规数据分开怎么办呢,这里是一个重载“Session”的基本类,这样你就可以在任何数据存储中使用“codeigniter”样式的flashdata调用。

_data)){
        //Remove old Flash data
        unset($this->_data['___of']);
    }

    if(array_key_exists('___flash',$this->_data)){
        //Move current last requests flash data to old flash data
        $this->_data['___of'] = $this->_data['___flash'];
        unset($this->_data['___flash']);
    }

    if(array_key_exists('___nf',$this->_data)){
        //Move Last Requests added data to the flash data
        $this->_data['___flash'] = $this->_data['___nf'];
        unset($this->_data['___nf']);
    }
}

/**
 * keeps a variable set in the sessions flashdata array.
 *
 *     $session->set_flashdata('foo', 'bar');
 *
 * @param   string   variable name
 * @param   ...
 * @return  $this
 */
public function keep_flashdata($k)
{
    $args = func_get_args();

    if(array_key_exists('___of',$this->_data)){
        foreach($args as $key){
            if(array_key_exists($key,$this->_data['___of'])){
                //So we were going to trash it...
                $this->set_flashdata($k,$this->_data['___of'][$key],true);
            }
        }
    }

    $this->_data['___nf'][$key] = $value;

    return $this;
}

/**
 * Set a variable in the sessions flashdata array.
 *
 *     $session->set_flashdata('foo', 'bar');
 *
 * @param   string   variable name
 * @param   mixed    value
 * @return  $this
 */
public function set_flashdata($key, $value, $current=false)
{
    if(!array_key_exists('___nf',$this->_data)){
        $this->_data['___nf'] = array();
    }

    $this->_data['___nf'][$key] = $value;

    if($current){
        if(!array_key_exists('___flash',$this->_data)){
            $this->_data['___flash'] = array();
        }
        $this->_data['flash'][$key] = $value;
    }

    return $this;
}

/**
 * Set a variable by reference in the sessions flashdata array.
 *
 *     $session->bind_flashdata('foo', $foo);
 *
 * @param   string  variable name
 * @param   mixed   referenced value
 * @return  $this
 */
public function bind_flashdata($key, & $value)
{
    if(!array_key_exists('___nf',$this->_data)){
        $this->_data['___nf'] = array();
    }

    $this->_data['___nf'][$key] =& $value;

    return $this;
}

/**
 * Removes a variable in the session array.
 *
 *     $session->delete_flashdata('foo');
 *
 * @param   string  variable name
 * @param   ...
 * @return  $this
 */
public function delete_flashdata($key)
{
    $args = func_get_args();

    if(array_key_exists('___nf',$this->_data)){
        foreach ($args as $key)
        {
            if(array_key_exists($key,$this->_data['___nf'])){
                unset($this->_data['___nf'][$key]);
            }
        }
    }
    return $this;
}

/**
 * Get a variable from the sessions flashdata array.
 *
 *     $foo = $session->get_flashdata('foo');
 *
 * @param   string   variable name
 * @param   mixed    default value to return
 * @return  mixed
 */
public function get_flashdata($key, $default = NULL)
{
    if(array_key_exists('___flash',$this->_data) && array_key_exists($key,$this->_data['___flash'])){
        return $this->_data['___flash'][$key];
    } else if(array_key_exists('___nf',$this->_data) && array_key_exists($key,$this->_data['___nf'])){
        return $this->_data['___nf'][$key];
    }

    return $default;
}

/**
 * Get and delete a variable from the session array.
 *
 *     $bar = $session->get_once('bar');
 *
 * @param   string  variable name
 * @param   mixed   default value to return
 * @return  mixed
 */
public function get_flashdata_once($key, $default = NULL)
{
    $value = $this->get_flashdata($key, $default);

    if(array_key_exists($key, $this->_data['___flash'])){
        unset($this->_data['___flash'][$key]);
    }

    if(array_key_exists($key, $this->_data['___nf'])){
        unset($this->_data['___nf'][$key]);
    }

    return $value;
}
}
?>

I realize there was an answer to this, and like i stated before, the get_once method is great and all, but i enjoy auto garbage collection much more.

我意识到有一个答案,就像我之前说过的那样,get_once方法很棒,但我更喜欢自动垃圾收集。

If you have any improvements on this code, let me know, its been great to me so far.

如果您对此代码有任何改进,请告诉我,到目前为止它对我来说很棒。

#3


1  

Have a look at this module, it might be what you are looking for https://github.com/daveWid/message

看看这个模块,它可能是你正在寻找的https://github.com/daveWid/message

#4


0  

I've written a really simple class for this once. Check it out below. Usage examples below

我曾为此写过一个非常简单的课程。请在下面查看。用法示例如下

class Notice {
    private static $session;
    private static $initialized = false;

    // current notices
    private static $notices = array();

    function __construct() {
    }

    static function init() {
        self::$session = Session::instance();
        self::$notices['current'] = json_decode(self::$session->get_once('flash'));
        if(!is_array(self::$notices['current'])) self::$notices['current'] = array();
        self::$initialized = true;
    }

    static function add($notice, $key=null) {
        if(!self::$initialized) self::init();
        if(!is_null($key)) {
            self::$notices['new'][$key] = $notice;
        } else {
            self::$notices['new'][] = $notice;
        }
        self::$session->set('flash', json_encode(self::$notices['new']));
        return true;
    }

    static function get($item = null) {
        if(!self::$initialized) self::init();
        if($item == null) {
            return self::$notices['current'];
        }
        if(!array_key_exists($item, self::$notices['current']))
                return null;
        return self::$notices['current'][$item];
    }
}

Examples (provided this class is saved as APPPATH . 'classes/notice.php'):

示例(假设此类保存为APPPATH。'classes / notice.php'):

Notice::add('Something great has happened!');
Notice::add('Exciting! I\'ve got something to tell you!', 'message');

echo Notice::get('message'); // "Exciting! I've got ..."
foreach(Notice::get() as $message) {
   echo $i++ . $message .'
'; }

EDIT: funny... for some reason this question popped up somewhere, didn't notice it was a really old one... sorry for that!

编辑:好笑...出于某种原因,这个问题出现在某个地方,没有注意到它是一个非常古老的...对不起!

#5


0  

I am using https://github.com/synapsestudios/kohana-notices in my project and I am very happy with it.

我在我的项目中使用https://github.com/synapsestudios/kohana-notices,我对它非常满意。


推荐阅读
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 本文深入探讨了 Java 中的 Serializable 接口,解释了其实现机制、用途及注意事项,帮助开发者更好地理解和使用序列化功能。 ... [详细]
  • 本文详细介绍了 Apache Jena 库中的 Txn.executeWrite 方法,通过多个实际代码示例展示了其在不同场景下的应用,帮助开发者更好地理解和使用该方法。 ... [详细]
  • andr ... [详细]
  • 并发编程:深入理解设计原理与优化
    本文探讨了并发编程中的关键设计原则,特别是Java内存模型(JMM)的happens-before规则及其对多线程编程的影响。文章详细介绍了DCL双重检查锁定模式的问题及解决方案,并总结了不同处理器和内存模型之间的关系,旨在为程序员提供更深入的理解和最佳实践。 ... [详细]
  • 本文详细介绍了如何构建一个高效的UI管理系统,集中处理UI页面的打开、关闭、层级管理和页面跳转等问题。通过UIManager统一管理外部切换逻辑,实现功能逻辑分散化和代码复用,支持多人协作开发。 ... [详细]
  • 本文详细介绍了Java中org.w3c.dom.Text类的splitText()方法,通过多个代码示例展示了其实际应用。该方法用于将文本节点在指定位置拆分为两个节点,并保持在文档树中。 ... [详细]
  • 高效解决应用崩溃问题!友盟新版错误分析工具全面升级
    友盟推出的最新版错误分析工具,专为移动开发者设计,提供强大的Crash收集与分析功能。该工具能够实时监控App运行状态,快速发现并修复错误,显著提升应用的稳定性和用户体验。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 在Linux系统中配置并启动ActiveMQ
    本文详细介绍了如何在Linux环境中安装和配置ActiveMQ,包括端口开放及防火墙设置。通过本文,您可以掌握完整的ActiveMQ部署流程,确保其在网络环境中正常运行。 ... [详细]
  • 将Web服务部署到Tomcat
    本文介绍了如何在JDeveloper 12c中创建一个Java项目,并将其打包为Web服务,然后部署到Tomcat服务器。内容涵盖从项目创建、编写Web服务代码、配置相关XML文件到最终的本地部署和验证。 ... [详细]
  • MQTT技术周报:硬件连接与协议解析
    本周开发笔记重点介绍了在新项目中使用MQTT协议进行硬件连接的技术细节,涵盖其特性、原理及实现步骤。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
author-avatar
MR付的世界
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有