可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I have a problem with setting flash messages.
So, i have an action which in some cases should redirect with flash. It looks like this:
if(!$this->_isSameOrg($reports)){
\Yii::$app->session->setFlash('consol_v_error',\Yii::t('app/consol', 'some_text'));
$this->redirect(\Yii::$app->request->getReferrer());
return;
}
After redirect in view i have this
<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>
The problem is i don't see any message here. In Debug panel i see SESSION var populated with good flash, but it doesn't display with this if-statement.
Maybe i need to configure session component or something?...
回答1:
To set flash,try like
\Yii::$app->getSession()->setFlash('error', 'Your Text Here..');
return $this->redirect('Your Action');
And to display it..
<?= Yii::$app->session->getFlash('error'); ?>
回答2:
you can try like this
<?php
foreach (Yii::$app->session->getAllFlashes() as $key => $message) {
echo '<div class="alert alert-' . $key . '">' . $message . '</div>';
}
?>
回答3:
Simply do:
Add two strings to: /views/layout/main.php
use frontend\widgets\Alert;
<?= Alert::widget() ?>
- Now all messages automatically will be on screen. Lets try it! Add in any controller's method:
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');
回答4:
Instead of this:
$this->redirect(\Yii::$app->request->getReferrer());
return;
try this:
return $this->redirect(\Yii::$app->request->getReferrer());
It's working fine for me.
回答5:
in yii2 flash can be set like this
Yii::$app->session->setFlash('success', 'Thank you ');
回答6:
Here is my solution:
overwrite standart Session class:
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;
}
}
So you can:
Yii::$app->session->addFlash('success', 'Text.');
Yii::$app->session->addFlash('success', 'Another text.');
And output this messages:
<?php foreach (Yii::$app->session->getAllFlashesNormalized() as $flash) { ?>
<div class="alert alert-<?=$flash['key']?>" role="alert"><?=$flash['message']?></div>
<?php } ?>
回答7:
Did not work for me.
I'd rather use:
In the controler:
$session = new Session;
$session->addFlash("warning","Your text here");
In the view :
<?php
$session = new Session;
foreach ($session->getAllFlashesNormalized() as $flash) {
?>
<div class="alert alert-<?=$flash['key']?>" role="alert">
<?=$flash['message']?>
</div>
<?php
}
?>
回答8:
in my case flash message deleted after redirect, when i use hasFlash before redirect.
if (!Yii::$app->getSession()->hasFlash('success')) {
Yii::$app->getSession()->setFlash('success', Yii::t('app', 'your text'));
}
So i added this and it helped
if (!Yii::$app->getSession()->hasFlash('success')) {
Yii::$app->getSession()->setFlash('success', Yii::t('app', 'your text'));
} else {
Yii::$app->getSession()->set('__flash', array('success' => -1));
}