Yii2 — вспышка не видна после перенаправления

Флеш-сообщения, кажется, сломаны в случае перенаправления. Я сделал простой тестовый код:

public function actionTest($test = 0) {
if($test == 0) {
Yii::$app->getSession()->addFlash('success', 'Follow the white rabbit');
return Yii::$app->getResponse()->redirect(array('test', 'test' => 1));
}
return $this->render('test', []);
}

Я называю действие без параметра, оно добавляет вспышку и перенаправляет. Когда он рендерит страницу — флеш нет.

Часть представления в порядке, потому что, если я установлю flash и сделаю рендеринг без перенаправления, он будет отображен правильно.

Зачем?

РЕДАКТИРОВАТЬ:
Код вида макета:

<?php

use frontend\widgets\Alert;

$this->beginPage();
echo $this->render('partials/head');
?>

<body class="no-sidebar">
<?= $this->beginBody() ?>
<div id="header">
<?= $this->render('partials/top') ?>
<?= $this->render(Yii::$app->user->isGuest ? 'menus/guest' : 'menus/registered') ?>
</div>
<!-- Main -->
<div id="main">
<?= Alert::widget() ?>
<?= $content ?>

</div>

<?= $this->render('partials/footer') ?>
<?= $this->endBody() ?>
</body>
</html>

<?php $this->endPage() ?>

8

Решение

Я получил ту же ошибку, пока не узнал, что return отсутствует в моем коде. Итак, с return $this->redirect() это работает просто отлично и с $this->redirect Это не очень хорошо работает.

21

Другие решения

Ваш код выглядит нормально, я не уверен, в чем проблема. Вы можете попробовать использовать

return $this->redirect(['test', 'test' => 1]);

Вместо

return Yii::$app->getResponse()->redirect(array('test', 'test' => 1));

Вот как большинство примеров Yii. Но ваш код выглядит нормально после просмотра
http://www.yiiframework.com/doc-2.0/yii-web-response.html#redirect()-detail

Вы уверены, что ваша сессия работает правильно, и вы ни в коем случае не разрушаете ее?

Это работает для меня:

public function actionChangeDetails()
{
$model = Contact::findOne(Yii::$app->user->identity->id);

if ($model->load(Yii::$app->request->post()) && $model->save()) {
Yii::$app->session->setFlash('success', 'Form Saved');
return Yii::$app->getResponse()->redirect(['my-account/change-details']);
}

return $this->render('changeDetails', [
'model' => $model,
]);
}
5

добавлять return в вашем redirect

Yii::$app->session->getFlash('key', 'message');

return $this->redirect(['yourAction']);
2

На странице просмотра вы должны добавить: ‘session-> getFlash (‘ success ‘); ?> «Как это описано здесь: Yii2 Session, Flash сообщения, тогда вы увидите ваше флеш сообщение

1

У меня есть решение:
Вы можете добавить строку ниже в файл представления, где должно появиться сообщение:

Затем вы можете добавить строку ниже в файл представления, где сообщение должно появиться.

if(Yii::$app->getResponse()->getStatusCode() != 302) {
Yii::$app->session->getFlash('error');
}

Или же вы можете добавить строку ниже в макете контента

<?= Alert::widget() ?>
// Before the line
<?= $content ?>
// in app/views/layouts/_content.php
// Depending on how you arranged your files.
1
По вопросам рекламы [email protected]