【问题标题】:PHP How to implement flash messagesPHP如何实现flash消息
【发布时间】:2011-04-06 02:31:23
【问题描述】:

我正在开发一个小型自定义 CMS,并希望实现 Flash 消息。我已经搜索了几个小时,但我找不到任何符合我想要的方式的东西。而且我似乎什么也做不了。

我希望能够将变量(通过 $_SESSION)传递到另一个页面,并且在下一个请求时,它将被删除。我希望能够使用 keep_flash 函数,以防我不希望在下一个服务器请求中删除该消息。

任何人都可以向我发送正确的方向吗?我真的什么都做不了。

谢谢。

编辑:这是我正在使用的一些代码。它有点工作。当您第一次访问该页面时,它会设置 $_SESSION 并且一切都很好。但是如果你刷新,现在它会删除 $_SESSION。如果您再次刷新,它会将其添加回来......等等。因此,如果您要访问该页面,刷新,然后转到另一个页面,则 Flash 消息不会在 $_SESSION 中。那么我该如何解决呢?

class flash
{
private $current = array();
private $keep    = array();

public function __construct()
{
    if (isset($_SESSION['flash'])) {
        foreach($_SESSION['flash'] as $k=>$v)
        {
            $this->current[$k] = $v;
        }
    }
}

public function __destruct()
{   
    foreach ($this->current as $k=>$v)
    {           
        if (array_key_exists($k,$this->keep) && $this->keep[$k] == $v) {
            // keep flash
            $_SESSION['flash'][$k] = $v;

        } else {
            // delete flash
            unset($_SESSION['flash'][$k]);
            unset($this->current[$k]);
            unset($this->keep[$k]);
        }           
    }
}

public function setFlash($key,$value)
{
    $_SESSION['flash'][$key] = $value;
}

public function keepFlash($key)
{
    $this->keep[$key] = $this->getFlash($key);
}

public function getFlash($key)  
{       
    if (array_key_exists($key,$this->current)) return $this->current[$key];

    return null;
}   
}

【问题讨论】:

    标签: php


    【解决方案1】:

    基本想法是让脚本始终检查会话中的特定变量(通常称为“flash”)的内容 - 如果不是空显示并将其从会话中删除。当需要消息时,只需在会话中放置相同的变量,下一次检查就会将其拾取....

    keep_flash 在你的情况下不会继续删除,或者根据你的需要移动到其他地方。

    对于实现只需谷歌它 - 通常它包含在某种类中 - 我个人喜欢 phpclasses.org 或框架的一部分

    【讨论】:

    • 请在原帖中查看我的编辑,我添加了一段代码。您的解决方案可以工作,只是它基本上就像单独使用 $_SESSION 一样。我希望我的班级删除所有未明确保留的闪存消息。因此,如果您在 page1.php 和 page2.php 上设置了 4 条 flash 消息,即使您只调用其中一条,如果没有使用 keep 方法保留,它们都应该被删除。
    • 我知道你很久以前就问过这个问题了。但这对你有帮助mikeeverhart.net/php/session-based-flash-messages
    猜你喜欢
    • 2012-07-12
    • 2017-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多