YII只存储最后一个闪存?

时间:2013-03-22 00:31:52

标签: yii

我有以下代码:

Yii::app()->user->setFlash('error', "Data1 failed!");
Yii::app()->user->setFlash('error', "Data2 failed!");
Yii::app()->user->setFlash('error', "Data3 failed!");

$flashes = Yii::app()->user->getFlashes();
if (sizeof($flashes) > 0 ) {
  print '<div id="flashes" style="margin: 5px; ">';
  foreach($flashes as $key => $message) {
    print '<div class="flash-' . $key . '">' . $message . "</div>\n";
  }
  print '</div>';
}

无论我做什么,它总是只打印“Data3失败!”。为什么用最后一个闪存覆盖闪烁,而不是将所有闪存添加到数组中?

我在配置中尝试了这个但没有运气:

'user' => array(
  'allowAutoLogin' => true,
  'class' => 'WebUser',
  'autoUpdateFlash' => false, 
),

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

这是预期的行为。 Yii flash消息是一个键值存储,这意味着每个键(比如错误)存储一个值(消息)。

使用您当前的代码,每次调用error时,您都会覆盖 setFlash键的值,并显示新消息。

你可以()将你的消息附加到相同的密钥,而不是覆盖它们:

Yii::app()->user->setFlash('error', "Data1 failed!");
Yii::app()->user->setFlash('error',
    Yii::app()->user->getFlash('error', '')." Data2 failed!");
Yii::app()->user->setFlash('error',
    Yii::app()->user->getFlash('error', '')." Data3 failed!");

从上面可以看出,getFlash从Flash商店收到一条消息。