热门标签 | 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,我对它非常满意。


推荐阅读
  • 本文探讨了 Kafka 集群的高效部署与优化策略。首先介绍了 Kafka 的下载与安装步骤,包括从官方网站获取最新版本的压缩包并进行解压。随后详细讨论了集群配置的最佳实践,涵盖节点选择、网络优化和性能调优等方面,旨在提升系统的稳定性和处理能力。此外,还提供了常见的故障排查方法和监控方案,帮助运维人员更好地管理和维护 Kafka 集群。 ... [详细]
  • 本文介绍了如何在iOS平台上使用GLSL着色器将YV12格式的视频帧数据转换为RGB格式,并展示了转换后的图像效果。通过详细的技术实现步骤和代码示例,读者可以轻松掌握这一过程,适用于需要进行视频处理的应用开发。 ... [详细]
  • 本文探讨了 Java 中 Pair 类的历史与现状。虽然 Java 标准库中没有内置的 Pair 类,但社区和第三方库提供了多种实现方式,如 Apache Commons 的 Pair 类和 JavaFX 的 javafx.util.Pair 类。这些实现为需要处理成对数据的开发者提供了便利。此外,文章还讨论了为何标准库未包含 Pair 类的原因,以及在现代 Java 开发中使用 Pair 类的最佳实践。 ... [详细]
  • 在前文探讨了Spring如何为特定的bean选择合适的通知器后,本文将进一步深入分析Spring AOP框架中代理对象的生成机制。具体而言,我们将详细解析如何通过代理技术将通知器(Advisor)中包含的通知(Advice)应用到目标bean上,以实现切面编程的核心功能。 ... [详细]
  • 探索偶数次幂二项式系数的求和方法及其数学意义 ... [详细]
  • 利用树莓派畅享落网电台音乐体验
    最近重新拾起了闲置已久的树莓派,这台小巧的开发板已经沉寂了半年多。上个月闲暇时间较多,我决定将其重新启用。恰逢落网电台进行了改版,回忆起之前在树莓派论坛上看到有人用它来播放豆瓣音乐,便萌生了同样的想法。通过一番调试,终于实现了在树莓派上流畅播放落网电台音乐的功能,带来了全新的音乐享受体验。 ... [详细]
  • Node.js 配置文件管理方法详解与最佳实践
    本文详细介绍了 Node.js 中配置文件管理的方法与最佳实践,涵盖常见的配置文件格式及其优缺点,并提供了多种实用技巧和示例代码,帮助开发者高效地管理和维护项目配置,具有较高的参考价值。 ... [详细]
  • 本文详细探讨了Zebra路由软件中的线程机制及其实际应用。通过对Zebra线程模型的深入分析,揭示了其在高效处理网络路由任务中的关键作用。文章还介绍了线程同步与通信机制,以及如何通过优化线程管理提升系统性能。此外,结合具体应用场景,展示了Zebra线程机制在复杂网络环境下的优势和灵活性。 ... [详细]
  • 在过去,我曾使用过自建MySQL服务器中的MyISAM和InnoDB存储引擎(也曾尝试过Memory引擎)。今年初,我开始转向阿里云的关系型数据库服务,并深入研究了其高效的压缩存储引擎TokuDB。TokuDB在数据压缩和处理大规模数据集方面表现出色,显著提升了存储效率和查询性能。通过实际应用,我发现TokuDB不仅能够有效减少存储成本,还能显著提高数据处理速度,特别适用于高并发和大数据量的场景。 ... [详细]
  • MySQL数据库安装图文教程
    本文详细介绍了MySQL数据库的安装步骤。首先,用户需要打开已下载的MySQL安装文件,例如 `mysql-5.5.40-win32.msi`,并双击运行。接下来,在安装向导中选择安装类型,通常推荐选择“典型”安装选项,以确保大多数常用功能都能被正确安装。此外,文章还提供了详细的图文说明,帮助用户顺利完成整个安装过程,确保数据库系统能够稳定运行。 ... [详细]
  • 在JavaWeb项目架构中,NFS(网络文件系统)的实现与优化是关键环节。NFS允许不同主机系统通过局域网共享文件和目录,提高资源利用率和数据访问效率。本文详细探讨了NFS在JavaWeb项目中的应用,包括配置、性能优化及常见问题的解决方案,旨在为开发者提供实用的技术参考。 ... [详细]
  • 蓝桥杯物联网基础教程:通过GPIO输入控制LED5的点亮与熄灭
    本教程详细介绍了如何利用STM32的GPIO接口通过输入信号控制LED5的点亮与熄灭。内容涵盖GPIO的基本配置、按键检测及LED驱动方法,适合具有STM32基础的读者学习和实践。 ... [详细]
  • 本文介绍了UUID(通用唯一标识符)的概念及其在JavaScript中生成Java兼容UUID的代码实现与优化技巧。UUID是一个128位的唯一标识符,广泛应用于分布式系统中以确保唯一性。文章详细探讨了如何利用JavaScript生成符合Java标准的UUID,并提供了多种优化方法,以提高生成效率和兼容性。 ... [详细]
  • React项目基础教程第五课:深入解析组件间通信机制 ... [详细]
  • 本文全面解析了 gRPC 的基础知识与高级应用,从 helloworld.proto 文件入手,详细阐述了如何定义服务接口。例如,`Greeter` 服务中的 `SayHello` 方法,该方法在客户端和服务器端的消息交互中起到了关键作用。通过实例代码,读者可以深入了解 gRPC 的工作原理及其在实际项目中的应用。 ... [详细]
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社区 版权所有