CakePHP:检查是否设置了SPECIFIC闪存消息

时间:2013-12-04 15:48:37

标签: php session cakephp cakephp-2.0

我有一个页面,其中有几个部分,其中包含从同一页面提交的表单。表单崩溃以节省空间,但如果提交时出现错误,我希望有条件地保持它们打开。

在我的控制器中,我为每个表单设置了一个特定的“密钥”(请参阅​​下面的location_key),这样我就可以在各自的位置回显它们:

在控制器中:

$this->Session->setFlash('You missed something...', 'element_name', array('class'=>'error'), 'location_key');

在视图中:

$this->Session->flash('location_key')

我正在试图弄清楚如何检查$this->Session->flash('location_key')是否存在。如果我这样做它可以工作,但取消设置flash消息:

if ( $this->Session->flash('location_key') ) // = TRUE
    //Do something
$this->Session->flash('location_key') // = FALSE (because it just got called)

如何测试此Flash消息的存在而不会使其消失?

3 个答案:

答案 0 :(得分:6)

想出来!这有效:

$this->Session->check('Message.location_key')

它返回true / false,具体取决于是否设置了任何此类Flash消息。 ->read()执行相同的操作,但是如果存在则返回闪存数据(任何且至关重要的是,它会离开会话变量,以便以后仍然可以回显)。

答案 1 :(得分:2)

Flash消息是(惊讶)stored in the session

public function setFlash($message, $element = 'default', $params = array(), $key = 'flash') {
    CakeSession::write('Message.' . $key, compact('message', 'element', 'params'));
}

要测试是否存在flash消息,请测试会话中的等效键,例如:

if (CakeSession::check('Message.location_key')) {
    ...
}

答案 2 :(得分:1)

嗯,根据the api,当你执行$this->Session->flash('location_key')时,SessionHelper会返回一个字符串(带有flash消息和元素),那么为什么不将该字符串存储到变量中呢?

$myFlash = $this->Session->flash('location_key');
if ($myFlash)
   /*etc*/

echo $myFlash;