多次继承而导致Yii->getSession()->getFlase()失效 [ 2.0 版本 ]
代码大概如下
class BaseController extends Controller{
public function init()
{
这里是初始化一些系统设置,配置的变量的信息
parent::init();
}
}
访问页面视图继承BaseController
class IndexController extends BaseController{
public function actionIndex()
{
访问的页面
}
}
现在有某个需求
新建一个父类控制器,但是需要继承BaseController,因为BaseController里有一些东西要用
然后
class UserController extends BaseController{
public function init()
{
这里是需要的处理过程
parent::init();
}
}
访问页面视图继承UserController
class MemberController extends UserController{
public function actionIndex()
{
访问的页面2
}
}
大概结构是这样,问题如下
class IndexController extends BaseController{
public function actionIndex()
{
\Yii::$app->getSession()->setFlash('error','错误提示');//设置一个错误提示
return $this->redirect(['/index/index/index2']);
}
public function actionIndex2()
{
echo \Yii::$app->getSession()->setFlash('error');
这里显示为 错误提示
}
}
class MemberController extends UserController{
public function actionIndex()
{
\Yii::$app->getSession()->setFlash('error','错误提示');//设置一个错误提示
return $this->redirect(['/member/index/index2']);
}
public function actionIndex2()
{
echo \Yii::$app->getSession()->setFlash('error');
这里没有东西显示,但是当UserController中没有 public function init()的时候就有数据
}
}
请问一下,这个要怎么处理呢?
共 2 个回答
-
首先你打印有没有进这个方法, echo也不需要
共 3 条回复方法是进了的,还有个奇怪的地方
比如
在视图中假如这样写
<?phpif(Yii::$app->getSession()->hasFlash('error')){ echo 110; die; echo Yii::$app->getSession()->getFlash('error'); }
?>
在继承的控制器的init中不满足判断已经return重定向了,此时不应该进入上面的视图对吧,如果进入了上面的视图,那么就该输出110并且停止,但是奇怪的是,每次跳转后都没有信息,然后我找到Yii::$app->getSession()->getFlash()的源方法,在getFlash()里面加一个 die;,此时还没跳转就停止了,所以是在return $this->redirect(url)->send();后不知道怎么的访问了在getFlash而导致获取一次后失效。
但我就不明白了
return $this->redirect(url)->send();后下面的就停止了,然后到新的页面,新页面就只有显示信息用的getFlash(),怎么就多运行了一次 -
dingjj2010 回答于 2017-12-27 08:59 举报
flash数据只能取一次,就删除了,
检查下在你输出前是不是被取出来过一次了.
竹林风
最后登录:2022-02-15
在线时长:53小时3分
- 粉丝4
- 金钱135
- 威望40
- 积分1065