Session Yii2会话,Flash消息

Session Yii2会话,Flash消息,session,yii2,Session,Yii2,我在设置flash消息时遇到问题。 所以,我有一个动作,在某些情况下应该用flash重定向。看起来是这样的: if(!$this->_isSameOrg($reports)){ \Yii::$app->session->setFlash('consol_v_error',\Yii::t('app/consol', 'some_text')); $this->redirect(\Yii::$app->request->getReferrer())

我在设置flash消息时遇到问题。 所以,我有一个动作,在某些情况下应该用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>

问题是我在这里没有看到任何消息。在调试面板中,我看到会话变量填充了良好的flash,但它并没有显示这个if语句。 也许我需要配置会话组件或其他什么?..

要设置flash,请尝试

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

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

在yii2闪存中,可以这样设置

Yii::$app->session->setFlash('success', 'Thank you ');
<?php
foreach (Yii::$app->session->getAllFlashes() as $key => $message) {
echo '<div class="alert alert-' . $key . '">' . $message . '</div>';
}
?>
你可以这样试试

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

而不是这个:

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

return;
试试这个:

return $this->redirect(\Yii::$app->request->getReferrer());
这对我来说很好。

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

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

只需执行以下操作:

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

    • 在块
      中使用

    • 之前:


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

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

    这可能与重定向有关,请尝试呈现测试视图,而不是
    $This->redirect(\Yii::$app->request->getreferer())并在那里显示flash消息。是否使用高级模板?使用全局flash部分(例如在布局中)渲染任何flash消息是一个很好的解决方案+1这不是一个好的解决方案,因为它会检索应用程序的所有会话消息。如果你想在网站的一个单独的部分实现,最好的方法就是这样做。你能详细说明一下为什么这样做有效吗?(为什么要返回值?)。谢谢这是因为返回的闪存在一个数组中。您可能会遇到以下错误:PHP Notice–yii\base\ErrorException数组到字符串的转换。与其他建议相比,我更喜欢这样。在我的例子中,我需要将这个小部件添加到我的项目中,因为我的安装基于基本模板。