2011-04-06 45 views
1

我正在处理一个小的自定义CMS并想实现Flash消息。我已经搜索了几个小时,但我找不到任何表现出我想要的方式。我似乎无法做任何工作。PHP如何实现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; 
} 
} 

回答

3

基本想法是有剧本经常检查特定变量的会话(通常被称为“快闪”)的内容 - 如果不是空的显示,并从会话中删除它。当需要消息只是地方是在会议和明年检查将它捡起来同一个变量....

keep_flash你的情况不会继续进行删除或移动根据您的需要的其他地方。

执行它只是谷歌 - 它通常裹在某种类的 - 我个人很喜欢phpclasses.org或请参阅我在原岗位的编辑,我添加的代码块框架

+0

的一部分。您的解决方案将工作,除了它本身就像使用$ _SESSION。我希望我的课程能够删除所有未明确保存的Flash消息。所以,如果你设置使page2.php上page1.php中4点的提示信息,即使你只叫他们中的一个,他们都应该被删除,如果没有一个是保持与保持方法。 – CrazeD 2011-04-06 21:34:44

+1

我知道你很久以前就问过这个问题了。但是,这可能是对你有帮助http://mikeeverhart.net/php/session-based-flash-messages/ – 2013-05-28 08:32:40