Ответ 1
Чтобы установить вспышку, попробуйте
\Yii::$app->getSession()->setFlash('error', 'Your Text Here..');
return $this->redirect('Your Action');
И чтобы отобразить его.
<?= Yii::$app->session->getFlash('error'); ?>
У меня проблема с настройкой флеш-сообщений. Итак, у меня есть действие, которое в некоторых случаях должно перенаправляться со вспышкой. Это выглядит так:
if(!$this->_isSameOrg($reports)){
\Yii::$app->session->setFlash('consol_v_error',\Yii::t('app/consol', 'some_text'));
$this->redirect(\Yii::$app->request->getReferrer());
return;
}
После переадресации я вижу это
<div class="col-lg-12">
<?php if(Yii::$app->session->hasFlash('consol_v_error')): ?>
<div class="alert alert-danger" role="alert">
<?= Yii::$app->session->getFlash('consol_v_error') ?>
</div>
<?php endif; ?>
</div>
Проблема в том, что я не вижу здесь никакого сообщения. В панели "Отладка" я вижу SESSION var, заполненную хорошей флеш-памятью, но она не отображается с помощью этого оператора if. Может быть, мне нужно настроить компонент сеанса или что-то еще?...
Чтобы установить вспышку, попробуйте
\Yii::$app->getSession()->setFlash('error', 'Your Text Here..');
return $this->redirect('Your Action');
И чтобы отобразить его.
<?= Yii::$app->session->getFlash('error'); ?>
вы можете попробовать как это
<?php
foreach (Yii::$app->session->getAllFlashes() as $key => $message) {
echo '<div class="alert alert-' . $key . '">' . $message . '</div>';
}
?>
Просто выполните:
Добавьте две строки: /views/layout/main.php
use
:use frontend\widgets\Alert;
<?= $content ?>
:<?= Alert::widget() ?>
Yii::$app->session->setFlash('warning', 'bla bla bla bla 1');
Yii::$app->session->setFlash('success', 'bla bla 2');
Yii::$app->session->setFlash('error', 'bla bla 3');
Вместо этого:
$this->redirect(\Yii::$app->request->getReferrer());
return;
попробуйте следующее:
return $this->redirect(\Yii::$app->request->getReferrer());
Он отлично работает для меня.
в yii2 флэш-память может быть установлена следующим образом
Yii::$app->session->setFlash('success', 'Thank you ');
Вот мое решение: перезаписать стандарт Класс сеанса:
namespace app\components;
use Yii;
class Session extends \yii\web\Session {
public function getAllFlashesNormalized() {
$flashes = [];
foreach (Yii::$app->session->getAllFlashes() as $key => $flash) {
if (is_array($flash))
foreach ($flash AS $message)
$flashes[] = ['key' => $key, 'message' => $message];
else
$flashes[] = ['key' => $key, 'message' => $flash];
}
return $flashes;
}
}
Итак, вы можете:
Yii::$app->session->addFlash('success', 'Text.');
Yii::$app->session->addFlash('success', 'Another text.');
И вывести следующие сообщения:
<?php foreach (Yii::$app->session->getAllFlashesNormalized() as $flash) { ?>
<div class="alert alert-<?=$flash['key']?>" role="alert"><?=$flash['message']?></div>
<?php } ?>
Не работает для меня. Я бы предпочел использовать:
В контроллере:
$session = new Session;
$session->addFlash("warning","Your text here");
В представлении:
<?php
$session = new Session;
foreach ($session->getAllFlashesNormalized() as $flash) {
?>
<div class="alert alert-<?=$flash['key']?>" role="alert">
<?=$flash['message']?>
</div>
<?php
}
?>