Как работать с «Flash» — сообщениями в Yii.


Flash-сообщения в Yii (flash-messages) позволяют передавать некоторый текстовый контент из контроллера в отображение. Речь, конечно же, не идет о передаче статей и больших кусков текста. Здесь подразумеваются короткие системные сообщения, например, об успешном сохранении данных или отправке формы. После того, как сообщение будет выведено на странице оно удаляется.

Мы можем передавать несколько различных сообщений, которые будут отображаться в различных местах на странице, но для этого каждому message мы должны присвоить свой уникальный идентификатор – «ключ».

Например, передать сообщение о том, что логин был неверным, мы можем следующим образом:

1
  Yii::app()->user->setFlash('error', "Логин не существует!");

Данная строчка должна идти в действии контроллера до вызова отображения.

В самом отображении мы проверяем, существует ли сообщение с ключом «error» и, если существует, выводим его. Для этого мы используем методы hasFlash() и getFlash():

1
2
3
4
5
<?php if(Yii::app()->user->hasFlash('error')):?>
    <span class="error_message">
        <?php echo Yii::app()->user->getFlash('error'); ?>
    </span>
<?php endif; ?>

Если нам нужно передать вместе с сообщением об ошибке также еще какие-то другие сообщения, то передаем их, используя свои «ключи»:

1
2
3
Yii::app()->user->setFlash('error', "Логин не существует!");
Yii::app()->user->setFlash('my_name', "Иван");
Yii::app()->user->setFlash('message3', "Это третье сообщение");

В отображении мы можем также сохранить все переданные сообщения в массив и затем вывести их из него. Для сохранения сообщений в массив используем getFlashes():

1
2
3
4
5
6
$allMessages = Yii::app()->user->getFlashes();
if ($allMessages) {
    foreach($allMessages as $key => $message) {
        echo '<span>' . $key.': '.$message . '</span><br>';
    }
}




Другие посты

Категория: Yii

Оставить комментарий