Не работают флеш сообщения с редирект

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Dark Gard
Сообщения: 79
Зарегистрирован: 2016.06.06, 11:39

Не работают флеш сообщения с редирект

Сообщение Dark Gard »

Добрый день.
Тема не нова, но и решения ее не нашел.
По порядку. Сессии храю в БД:

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

'session' => [
	'class' => 'yii\web\DbSession',
	'timeout' => 86400,
],
В контроллере

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

public function actionIndex()
{
	Yii::warning(Yii::$app->session->getId());
        return $this->render(['index']);
}

public function actionHelloWord()
{
	Yii::warning(Yii::$app->session->getId());
	Yii::$app->session->setFlash('success', 'Hello Word!');
        return $this->redirect(['index']);
}
В layout через стандартный виджет Alert выводим все флэш сообщения.

Но проблема в том, что у авторизованного пользователя session_id оказываются разные при обращении к 'hello-word' и после редиректа на 'index'. В результате на странице index флэш сообщений мы не видим, хотя в базе сессия для 'hello-word' содержит его.

Подскажите плиз, как решить проблему.
Аватара пользователя
leonenco
Сообщения: 155
Зарегистрирован: 2017.01.30, 22:42

Re: Не работают флеш сообщения с редирект

Сообщение leonenco »

Передай 3 параметер Yii::$app->session->setFlash('success', 'Hello Word!', false);

https://www.yiiframework.com/doc/api/2. ... h()-detail
Dark Gard
Сообщения: 79
Зарегистрирован: 2016.06.06, 11:39

Re: Не работают флеш сообщения с редирект

Сообщение Dark Gard »

leonenco писал(а): 2020.06.18, 22:37 Передай 3 параметер Yii::$app->session->setFlash('success', 'Hello Word!', false);

https://www.yiiframework.com/doc/api/2. ... h()-detail
Проверял - не помогает.
Аватара пользователя
Dominus
Сообщения: 892
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: Не работают флеш сообщения с редирект

Сообщение Dominus »

Попробуйте так:

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

'session' => [
    'class' => 'yii\web\DbSession',
    'name' => 'app-frontend',
    'timeout' => 86400,
],
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
Аватара пользователя
leonenco
Сообщения: 155
Зарегистрирован: 2017.01.30, 22:42

Re: Не работают флеш сообщения с редирект

Сообщение leonenco »

Такае же проблема, на остальных контроллерах при рендере все отрабатывает, а при `redirect()` теряется где-то. Идеи?
Controller:

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

public function actionUpdate($id): Response|string
    {
        $driver     = Drivers::findOne($id);

        try {
            if ($driver === null) {
                throw new NotFoundHttpException('Запрашиваемая страница не найдена.');
            }
        } catch (NotFoundHttpException $ex) {
            \Yii::$app->session->addFlash('warning', $ex->getMessage());

             return $this->redirect(['index']);
        }

        if ($driver->load(\Yii::$app->request->post()) && $driver->validate()) {
            $transaction = \Yii::$app->db->beginTransaction();

            try {
                if ($driver->save()) {
                    
                    $transaction->commit();

                    \Yii::$app->session->addFlash('success', 'Обновленно.', false);

		     return $this->redirect(['index']);
                }

                throw new InvalidArgumentException('Возникли проблемы при обновлении. Попробуйте позже.');
            } catch (Exception $ex) {
                \Yii::$app->session->addFlash('warning', $ex->getMessage(), false);

                return $this->render('update', [
                    'driver'      => $driver
                ]);
            }
        }

        return $this->render('update', [
            'driver'      => $driver,
            'files_form'  => $files_form,
        ]);
    }
И конфиг:

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

...
'session' => [
            'class'        => \yii\web\DbSession::class,
            'name'         => 'app-frontend',
            'timeout'    => 7 * 24 * 60 * 60, // 7 days
        ],
...
Ответить