Yii2 Session,Flash消息

Ant*_*mov 35 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;
}
Run Code Online (Sandbox Code Playgroud)

在重定向后,我有这个

<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>
Run Code Online (Sandbox Code Playgroud)

问题是我在这里看不到任何消息.在调试面板中,我看到SESSION var填充了良好的闪存,但它不会显示此if语句.也许我需要配置会话组件或什么?...

Den*_*G B 45

要设置闪光灯,请尝试

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

并显示它..

   <?= Yii::$app->session->getFlash('error'); ?>
Run Code Online (Sandbox Code Playgroud)


小智 31

你可以这样试试

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

  • 使用全局闪存部分的非常好的解决方案 - 例如在布局中 - 呈现任何闪存消息.+1 (2认同)

小智 14

简单地说:

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

    • 在块中use:

    use frontend\widgets\Alert;
    
    Run Code Online (Sandbox Code Playgroud)
    • 之前<?= $content ?>:

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

  • 我比其他建议更喜欢这个.在我的情况下,我需要将此小部件添加到我的项目,因为我的安装基于Basic模板.https://github.com/yiisoft/yii2-app-advanced/blob/master/common/widgets/Alert.php (4认同)

小智 9

而不是这个:

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

return;
Run Code Online (Sandbox Code Playgroud)

试试这个:

return $this->redirect(\Yii::$app->request->getReferrer());
Run Code Online (Sandbox Code Playgroud)

它对我来说很好.