2011-04-06 49 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