使用功能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; ?>
怎么了?
答案 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
希望对您有帮助。