flash сообщения теряются при редиректе :-(

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Аватара пользователя
Insolita
Сообщения: 788
Зарегистрирован: 2011.06.06, 01:39
Контактная информация:

flash сообщения теряются при редиректе :-(

Сообщение Insolita »

в контроллере

Код: Выделить всё

 public function actionIndex(){
        $cars=Transport::getList();
        \Yii::$app->session->setFlash('cars_info',count($cars));
        if(empty($cars)){
            \Yii::$app->session->setFlash('success', 'Yes! Its`s empty!',false);
            $this->redirect(['/site/simlay']);
        }
     ...............
 
Если редирект убрать то норм выводятся.
Настройки компонента сессий:

Код: Выделить всё

'session' => [
            'class' => 'yii\web\Session',
            'timeout'=>3600,
        ],
 
На перенаправляемой странице

Код: Выделить всё

$allflash=\Yii::$app->session->getAllFlashes();
Helper::dump($allflash);
 
Пусто... с параметром последним у setFlash и так и так пробовала... layout совсем примитивный задала чтоб все лишние возможные помехи исключить.. ЧЯДНТ?
Последний раз редактировалось Insolita 2014.07.16, 16:58, всего редактировалось 2 раза.
Аватара пользователя
Insolita
Сообщения: 788
Зарегистрирован: 2011.06.06, 01:39
Контактная информация:

Re: flash сообщения теряются при редиректе :-(

Сообщение Insolita »

нашла в issue https://github.com/yiisoft/yii2/issues/2510
но что c accessControl, что без него, что с правилом ['allow'=>true] на все не срабатывает... а issue вроде как закрытый
фреймворк обновляю регулярно....
Аватара пользователя
yiijeka
Сообщения: 3103
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: flash сообщения теряются при редиректе :-(

Сообщение yiijeka »

Код: Выделить всё

return $this->redirect(...) 
Последний раз редактировалось yiijeka 2014.07.15, 09:14, всего редактировалось 2 раза.
Аватара пользователя
alexantr
Сообщения: 9
Зарегистрирован: 2014.05.13, 09:31

Re: flash сообщения теряются при редиректе :-(

Сообщение alexantr »

Слышал, проблема с flash сообщениями может быть из-за yii2-debug, если yii из dev-ветки, а yii2-debug нет
Аватара пользователя
Insolita
Сообщения: 788
Зарегистрирован: 2011.06.06, 01:39
Контактная информация:

Re: flash сообщения теряются при редиректе :-(

Сообщение Insolita »

debug тоже из dev и выключение его не помогает
Аватара пользователя
Insolita
Сообщения: 788
Зарегистрирован: 2011.06.06, 01:39
Контактная информация:

Re: flash сообщения теряются при редиректе :-(

Сообщение Insolita »

о! Помогло

Код: Выделить всё

return $this->redirect(Url::to(['/controller/index']));
 
хотя по сути не поняла как влияет - синтакис $this->redirect(['/controller/index']) по мануалу допускается
и внутри оно то же самое делает Yii::$app->getResponse()->redirect(Url::to($url), $statusCode);


Чудеса какие-то... сейчас хоть как ссылку задвай работает...
Аватара пользователя
Insolita
Сообщения: 788
Зарегистрирован: 2011.06.06, 01:39
Контактная информация:

Re: flash сообщения теряются при редиректе :-(

Сообщение Insolita »

пффф... новая проблема - если ставить сообщение в фильтре или базовом контроллере и редиректить то не отображается :-(
Но при этом если сообщение оставить в базовом, а редиректить уже из экшна - то показывается
lynicidn
Сообщения: 2222
Зарегистрирован: 2014.05.24, 15:12

Re: flash сообщения теряются при редиректе :-(

Сообщение lynicidn »

скорее всего, то что сессия работает напрямую с глобальным объектом https://github.com/yiisoft/yii2/blob/7b ... n.php#L718
попробуйте вызвать до установки флеша $session->open()
lynicidn
Сообщения: 2222
Зарегистрирован: 2014.05.24, 15:12

Re: flash сообщения теряются при редиректе :-(

Сообщение lynicidn »

хотя нет, тут она открывается https://github.com/yiisoft/yii2/blob/7b ... n.php#L543
Аватара пользователя
Insolita
Сообщения: 788
Зарегистрирован: 2011.06.06, 01:39
Контактная информация:

Re: flash сообщения теряются при редиректе :-(

Сообщение Insolita »

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

Код: Выделить всё

2014-07-16 15:42:28 [127.0.0.1][1][-][info][spec] transp relcount 0
    in /home/kompusha/www/data/wcrm/common/CheckrelFilter.php:53
    in /home/kompusha/www/data/wcrm/common/StaffController.php:145
2014-07-16 15:42:28 [127.0.0.1][1][-][info][dumps] Flash seted from probeg/index.html
    in /home/kompusha/www/data/wcrm/common/CheckrelFilter.php:58
    in /home/kompusha/www/data/wcrm/common/StaffController.php:145
2014-07-16 15:42:28 [127.0.0.1][1][-][info][dumps] Alerts called from probeg/index.html
    in /home/kompusha/www/data/wcrm/widgets/Alerts.php:32
    in /home/kompusha/www/data/wcrm/views/layouts/dash.php:94
    in /home/kompusha/www/data/wcrm/controllers/ProbegController.php:99
2014-07-16 15:42:28 [127.0.0.1][1][-][info][dumps] Get All Flashes 
[
    'transport_error' => 'Прежде чем вести учет пробега, заполните справочник транспорта'
]


    in /home/kompusha/www/data/wcrm/widgets/Alerts.php:35
    in /home/kompusha/www/data/wcrm/views/layouts/dash.php:94
    in /home/kompusha/www/data/wcrm/controllers/ProbegController.php:99
2014-07-16 15:42:28 [127.0.0.1][1][-][info][dumps] Alerts called from transport/index.html
    in /home/kompusha/www/data/wcrm/widgets/Alerts.php:32
    in /home/kompusha/www/data/wcrm/views/layouts/dash.php:94
    in /home/kompusha/www/data/wcrm/actions/IndexAction.php:54
2014-07-16 15:42:28 [127.0.0.1][1][-][info][dumps] Get All Flashes 
[]


    in /home/kompusha/www/data/wcrm/widgets/Alerts.php:35
    in /home/kompusha/www/data/wcrm/views/layouts/dash.php:94
    in /home/kompusha/www/data/wcrm/actions/IndexAction.php:54
Аватара пользователя
Insolita
Сообщения: 788
Зарегистрирован: 2011.06.06, 01:39
Контактная информация:

Re: flash сообщения теряются при редиректе :-(

Сообщение Insolita »

а, тут то как раз последний параметр false срабатывает, если его ставить то норм всё.... кажется
lynicidn
Сообщения: 2222
Зарегистрирован: 2014.05.24, 15:12

Re: flash сообщения теряются при редиректе :-(

Сообщение lynicidn »

так правильно вы же дамп делаете :) ?
lynicidn
Сообщения: 2222
Зарегистрирован: 2014.05.24, 15:12

Re: flash сообщения теряются при редиректе :-(

Сообщение lynicidn »

при дампе происходит чтение и конечно он удалится, а вот фальш спасет
Аватара пользователя
Insolita
Сообщения: 788
Зарегистрирован: 2011.06.06, 01:39
Контактная информация:

Re: flash сообщения теряются при редиректе :-(

Сообщение Insolita »

Ну всё да с прамаетром false работает как надо
Аватара пользователя
yiijeka
Сообщения: 3103
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: flash сообщения теряются при редиректе :-(

Сообщение yiijeka »

Аминь.
belkod
Сообщения: 52
Зарегистрирован: 2014.01.04, 21:56

Re: flash сообщения теряются при редиректе :-(

Сообщение belkod »

Insolita писал(а):Ну всё да с прамаетром false работает как надо
Где этот параметр ставить нужно?

У меня те же проблемы, нет флешек при goHome(), goBack(), redirect
Аватара пользователя
Insolita
Сообщения: 788
Зарегистрирован: 2011.06.06, 01:39
Контактная информация:

Re: flash сообщения теряются при редиректе :-(

Сообщение Insolita »

Yii::$app->session->setFlash('key','message',false);
belkod
Сообщения: 52
Зарегистрирован: 2014.01.04, 21:56

Re: flash сообщения теряются при редиректе :-(

Сообщение belkod »

не идет :(

Код: Выделить всё

    public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::className(),
                'rules' => [
                    // Разрешаем доступ нужным пользователям.
                    [
                        'allow' => true,
                        'actions' => ['login', 'signup', 'resend', 'activation', 'recovery'],
                        'roles' => ['?']
                    ],
                    [
                        'allow' => true,
                        'actions' => ['logout', 'request-email-change', 'password', 'update'],
                        'roles' => ['@']
                    ],
                    [
                        'allow' => true,
                        'actions' => ['step2', 'step3', 'step4'],
                        'roles' => ['@']
                    ],
/* ..... др код .......*/


    public function actionLogin()
    {
        if (!Yii::$app->user->isGuest) {
            $this->goHome();
        }
        $model = new LoginForm;
        if ($model->load(Yii::$app->request->post()) && $model->login()) {
            if (Yii::$app->user->can('curator')) {
                if($profile=Profile::find()->where(['and', 'user_id=:user_id'],[':user_id'=>Yii::$app->user->identity->id])->one())
                {
                    if(!$profile->checkStep2())
                    {
                        Yii::$app->getSession()->setFlash('danger', 'Вы не завершили регистрацию. Не пройден шаг 2.', false);
                        return $this->redirect(['default/step2']);
                    }
                    if(!$profile->checkStep3())
                    {
                        Yii::$app->getSession()->setFlash('danger', 'Вы не завершили регистрацию. Не пройден шаг 3.', false);
                        return $this->redirect(['default/step3']);
                    }
                }
                                else
                                {
                                   Yii::$app->getSession()->setFlash('danger', 'Вам необходимо завершить регистрацию, пройдя следующие шаги.', false);
                                    return $this->redirect(Url::to(['default/step2']));
                                }
                 }
            // В случае успешной авторизации, перенаправляем пользователя на главную страницу.
            return $this->goHome();
        }
        // Рендерим представление.
        return $this->render('login', [
            'model' => $model
        ]);
    }

не срабатывает здесь, хотя и в д. местах тоже:

Код: Выделить всё

                    Yii::$app->session->setFlash('danger', 'Вам необходимо завершить регистрацию, пройдя следующие шаги.', false);
                    return $this->redirect(['default/step2']);
 
пробовал по разному:
Yii::$app->getSession()->setFlash('danger', 'Вам необходимо завершить регистрацию, пройдя следующие шаги.', false);
Yii::$app->session->setFlash('danger', 'Вам необходимо завершить регистрацию, пройдя следующие шаги.', false);
return $this->redirect(['default/step2']);
return $this->redirect(Url::to(['default/step2']));
Аватара пользователя
Faenir
Сообщения: 292
Зарегистрирован: 2010.01.06, 01:46
Откуда: Симферополь

Re: flash сообщения теряются при редиректе :-(

Сообщение Faenir »

А как выводите?
belkod
Сообщения: 52
Зарегистрирован: 2014.01.04, 21:56

Re: flash сообщения теряются при редиректе :-(

Сообщение belkod »

через стандартный Alert:
<?= Alert::widget() ?>
Ответить