2017-12-23 13:04:31 1996次浏览 2条回答 0 悬赏 15 金钱

代码大概如下
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()的时候就有数据
}

}

请问一下,这个要怎么处理呢?

  • 回答于 2017-12-24 20:01 举报

    首先你打印有没有进这个方法, echo也不需要

    3 条回复
    回复于 2017-12-25 23:05 回复

    方法是进了的,还有个奇怪的地方
    比如
    在视图中假如这样写
    <?php

    echo 110;

    die;
    echo Yii::$app->getSession()->setFlash('error');
    

    ?>

    在继承的控制器的init中不满足判断已经重定向了,此时不应该进入上面的视图对吧,如果进入老人

    回复于 2017-12-25 23:05 回复

    方法是进了的,还有个奇怪的地方
    比如
    在视图中假如这样写
    <?php

    if(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(),怎么就多运行了一次

    回复于 2017-12-26 08:57 回复

    没看明白啊

  • 回答于 2017-12-27 08:59 举报

    flash数据只能取一次,就删除了,
    检查下在你输出前是不是被取出来过一次了.

您需要登录后才可以回答。登录 | 立即注册
竹林风
经理

竹林风

注册时间:2017-04-06
最后登录:2022-02-15
在线时长:53小时3分
  • 粉丝4
  • 金钱135
  • 威望40
  • 积分1065

热门问题