Yii2,setFlash()不保留值

时间:2019-08-02 15:22:23

标签: session yii2 flash-message

使用功能Yii::$app->setFlash()时发生奇怪的事情。该值不保留。

在我的班级过滤器中,我尝试验证某些条件并通过Flash消息报告错误,然后重定向到某个URL,在此我可以显示此消息友好。

class filterTime extends ActionFilter
{
    public function beforeAction($action)
    {
        //Evaluate some condition then fire 
        //message
        Yii::$app->session->setFlash('error', "this is a error message");    
        return Yii::$app->controller->redirect(Url::toRoute('/masters/workers'));
    }

    public function afterAction($action, $result)
    {
        return parent::afterAction($action, $result);
    }
}

此地址重定向到新地址后,什么也没有显示。没有显示。尽管我已经将div在新地址的视图中显示了此消息:

<?php if (Yii::$app->session->hasFlash('error')): ?>
    <div class="alert alert-danger">
         <?= Yii::$app->session->getFlash('error') ?>
    </div>
<?php endif; ?>

怎么了?

2 个答案:

答案 0 :(得分:3)

您以错误的方式使用beforeAction()beforeAction()应该返回布尔值-如果要阻止执行实际操作,则应该返回false

public function beforeAction($action) {
    if (/* some condition */) {
        Yii::$app->session->setFlash('error', 'this is a error message');  
        // setup response for redirection
        Yii::$app->controller->redirect(Url::toRoute('/masters/workers'));
        return false;
    }  

     return parent::beforeAction($action);
}

答案 1 :(得分:0)

在重定向到另一个页面时,您必须以这种方式保留flash

Yii::$app->session->setFlash('error', 'this is a error message', false); // false keep that message

希望对您有帮助。