Yii2 Session,Flash消息

时间:2014-08-18 15:49:39

标签: session yii2

我在设置Flash消息时遇到问题。 所以,我有一个动作,在某些情况下应该重定向闪存。它看起来像这样:

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语句。 也许我需要配置会话组件或什么?...

8 个答案:

答案 0 :(得分:45)

要设置闪光灯,请尝试

  \Yii::$app->getSession()->setFlash('error', 'Your Text Here..');
   return $this->redirect('Your Action');

并显示它..

   <?= Yii::$app->session->getFlash('error'); ?>

答案 1 :(得分:31)

你可以这样尝试

<?php
foreach (Yii::$app->session->getAllFlashes() as $key => $message) {
echo '<div class="alert alert-' . $key . '">' . $message . '</div>';
}
?>

答案 2 :(得分:14)

简单地说:

  1. 将两个字符串添加到:/views/layout/main.php

      阻止use中的

    use frontend\widgets\Alert;
    
    • 之前<?= $content ?>

    <?= Alert::widget() ?>
    
  2. 现在所有消息都会自动显示在屏幕上。让我们试试吧!添加任何控制器的方法:
  3. 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');
    

答案 3 :(得分:9)

而不是:

$this->redirect(\Yii::$app->request->getReferrer());

return;

试试这个:

return $this->redirect(\Yii::$app->request->getReferrer());

它对我来说很好。

答案 4 :(得分:3)

yii2中的

可以像这样设置

Yii::$app->session->setFlash('success', 'Thank you ');

答案 5 :(得分:1)

这是我的解决方案:  覆盖标准会话类:

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 } ?>

答案 6 :(得分:0)

在我的情况下,重定向后删除了Flash消息,当我在重定向之前使用hasFlash时。

if (!Yii::$app->getSession()->hasFlash('success')) {
    Yii::$app->getSession()->setFlash('success', Yii::t('app', 'your text'));
}  

所以我添加了它,对它有帮助

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));
} 

答案 7 :(得分:-1)

对我不起作用。 我宁愿使用:

在控制器中:

$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 
} 
?>