我有一個通知類用於提供一次性消息通知。該通知被存儲在一個Kohana的會話(餅乾)和我的getter看起來像這樣(回波是有用於調試):Kohana 3中的會話變量在刪除後不斷重置
private static function _get($key)
{
$session = Session::instance();
$value = $session->get($key);
echo $key . ': ' . $session->get($key) . '<br />';
$session->delete($key);
echo 'deleted ' .$key. ', value now: ' .$session->get($key). '<br /><br />';
return $value;
}
現在,一個頁面我使用這個類上是登錄頁面。當用戶輸入不正確的登錄信息時,它會執行我期望的操作:顯示錯誤,提示「用戶名/密碼不正確」。這條消息應該是已刪除,因爲我調用了getter,並且getter將它從會話中刪除。
但是,情況並非如此。該消息也顯示在下一頁上。如果我轉到顯示通知的任何其他頁面,也會顯示錯誤,直到顯示不同的錯誤(例如,如果我錯誤地在另一個表單上輸入信息)。
這是從回波的頁面上顯示:
error: Username/password combination is incorrect.
deleted error, value now:
這表明價值是被刪除,但它仍然顯示,當我刷新頁面同樣的事情。
如果有幫助,這是什麼設置錯誤消息的過程就像是從控制器我打電話Notices::error('message');
調用該方法:
public static function error($value = NULL)
{
return Notices::_notice('error', $value);
}
的呼叫:
private static function _notice($key, $value)
{
// If value is not NULL, then store the notice
if (! is_null($value))
{
Notices::_set($key, $value);
return TRUE;
}
else
{
// If value is not NULL. retieve key and format HTML
if (! is_null($value = Notices::_get($key)))
{
return "$value";
}
// If the key does not exist return empty string
else
{
return '';
}
}
}
和setter看起來像這樣:
private static function _set($key, $value)
{
Session::instance()->set($key, $value);
return TRUE;
}