Флеш-сообщения в yii используются для того, что бы сохранить в сессии некий текст, и после отображения его пользователю - сразу удалить. Разберем подробнее.
Flash-сообщения в Yii (flash-messages) позволяют передавать некоторый текстовый контент из контроллера в отображение. Подразумеваются короткие системные сообщения, например, об успешном сохранении данных или отправке формы. После того, как сообщение будет выведено на странице оно удаляется. Понятие "флеш-сообщение" никак не связано с технологие Flash от Adobe! Yii (flash-messages) работают с помощью сессий (хранятся в $_SESSION).
Мы можем передавать несколько различных сообщений, которые будут отображаться в различных местах на странице, но для этого каждому message мы должны присвоить свой уникальный идентификатор – «ключ».
Например, передать сообщение о том, что логин был неверным, мы можем следующим образом:
Yii::app()->user->setFlash('error', "Логин не существует!");
Данная строчка должна идти в действии контроллера до вызова отображения.
В самом отображении мы проверяем, существует ли сообщение с ключом «error» и, если существует, выводим его. Для этого мы используем методы hasFlash() и
getFlash():
<?php if(Yii::app()->user->hasFlash('error')):?>
<span class="error_message">
<?php echo Yii::app()->user->getFlash('error'); ?>
</span>
<?php endif; ?>
Если нам нужно передать вместе с сообщением об ошибке также еще какие-то другие сообщения, то передаем их, используя свои «ключи»:
Yii::app()->user->setFlash('error', "Логин не существует!");
Yii::app()->user->setFlash('my_name', "Иван");
Yii::app()->user->setFlash('message3', "Это третье сообщение");
В отображении мы можем также сохранить все переданные сообщения в массив и затем вывести их из него. Для сохранения сообщений в массив используем getFlashes():
$allMessages = Yii::app()->user->getFlashes();
if ($allMessages) {
foreach($allMessages as $key => $message) {
echo '<span>' . $key.': '.$message . '</span>';
}
}