2013-03-22 4 views
4

У меня есть следующий код: «Data3 не удалось»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>'; 
} 

Независимо от того, что я делаю, это всегда только печать. Почему это перезаписывает вспышки с последним, а не добавляет все вспышки в массив?

Я попытался это в моей конфигурации не повезло:

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

Любые идеи?

ответ

3

Ожидается поведение. Всплывающие сообщения Yii - это хранилище ключей, которое означает, что для каждой клавиши (например, ошибка) сохраняется значение (сообщение).

С текущего кода, вы перезапись Значение 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 получает одно сообщение из флэш-магазине.

Смежные вопросы