setFlash

Кто-то пользуется setFlash() ?

Как оно работает?

У меня почему-то ничего не получается.

Совсем ничего не получаться не может :) Что именно не работает?

Всё, что она делает - это заносит значение в переменную $_SESSION. Извлечь соответствующее значение можно при помощи getFlash().

пусто, совсем пусто)

код в примере не работает, сейчас еще разок продебажу.

после выполнения setFlash() в сессии лежит моя строка.

потом идет редирект и на следующей странице сессия совсем пустая, там просто ничего нет.

наверное это какой-то локальный глючек

флеш переменная живет в течении текущего и следующего запроса, затем уничтожается.

т.е. вы устанавливаете флеш-переменную, делаете один редирект, получаете её, а вот при следующем редиректе(переходе на другую страницу), её уже не будет существовать.

Если данные вам нужны в течении всей сессии пользователя, используйте setState

я знаю английский, вот только не знаю почему у меня для одного контроллера не работает вывод сохраненного в сессии сообщения (

У меня нормально работает. В контроллере или в модели делаю так:




public function afterSave() {

        if ($this->sendToEmail()) {

            Yii::app()->user->setFlash("CONTACT_EMAIL", t('CONTACT_EMAIL_SENT'));

        } else {

            Yii::app()->user->setFlash("CONTACT_EMAIL", t('CONTACT_EMAIL_NOT_SENT') . ' [' . $this->mailerErrorInfo . ']');

        }

    }



Потом в layout’е показываю сообщение:




<div id="content">

    <?php if(Yii::app()->user->hasFlash('CONTACT_EMAIL')):?>

    <div class="info" style="display:none;">

        <?php  echo Yii::app()->user->getFlash('CONTACT_EMAIL'); ?>

    </div>

    <?php

        Yii::app()->clientScript->registerScript(

            'myShowHideEffect',

            '$(".info").slideDown("slow", function(){$(".info").animate({opacity: 1.0}, 5000).fadeOut("slow");});',

            CClientScript::POS_READY

        );

    ?>

    <?php endif; ?>

...



Во всех вызовах setFlash / hasFlash / getFlash должен использоваться один и тот же идентификатор сообщения, в данном случае - CONTACT_EMAIL. Может в этом дело?

да нет, не в этом.

я просто использовал код с примера.

у меня в одном экшене почему-то нет этой информации. а в других есть.

ну это уже мелочь, позже поищу что за проблема с ним