2015-11-30 21:18:38 2743次浏览 2条回答 0 悬赏 90 金钱

Controller.php里的construct方法 里面的参数我打印过都有值,就是不清楚,$id, $module这2个值谁传进来的??
我以前把
construct当做是构造方法,自动会运行的

public function __construct($id, $module, $config = [])
{
    $this->id = $id;
    $this->module = $module;
    parent::__construct($config);
}

还有一个方法getModules(),获取当前控制器所有的父模块,现在的问题是我的是基础版,没有模块,那这个方法为什么运行进来了,而且什么时候调用的??

public function getModules()
{
    $modules = [$this->module];
    $module = $this->module;
    while ($module->module !== null) {
        array_unshift($modules, $module->module);
        $module = $module->module;
    }
    return $modules;
}
  • 回答于 2015-12-01 10:19 举报

    写错了!!!!

    觉得很赞
  • 回答于 2015-12-01 10:26 举报

    1, $id, $module这2个值谁传进来的 ?

    Module传进来的;

    Module通过路由 or controllerMap得到controllerId, 再把自身传进来, 就实例化出controller了;

    2, 基础版中,没有模块,getModules()方法为什么运行进来,什么时候调用的 ?

    首先 基础版中, 是有模块的, 并且可以嵌套多层;

    Yii本身就是建立在Module的基础上, Yii::$app也是一个Module.

    至于什么时候调用,

    在框架中, 触发controller中的 beforeActionafterAction事件时, 会调用祖宗Module 执行相应的事件.

    对于开发者来说, 你通过controller调用getModules方法 , 或者 访问controllermodules属性时候 就调用了

    5 条回复
    回复于 2015-12-01 11:01 回复

    Module传进来的 是不是Module里的createController方法

    回复于 2015-12-01 11:26 回复

    Module里的哪句是给$id, $module这2个值传的 找不到

    回复于 2015-12-01 11:43 回复

    Yii::createObject($this->controllerMap[$id], [$id, $this]);

    Yii::createObject($className, [$id, $this]);

    这是Yii创建实例的方式, 实现了依赖倒置的设计理念.

    具体的实现在 \yii\di\ServiceLocator\yii\di\Container 以及辅助的\yii\di\Instance

    回复于 2015-12-01 12:27 回复

    你说的是这句: if (isset($this->controllerMap[$id])) {

            $controller = Yii::createObject($this->controllerMap[$id], [$id, $this]);
            return [$controller, $route];
        }
    

    可是他没运行进来

    回复于 2015-12-01 14:03 回复

    你没有controllerMap当然不会执行到这里. 有这个就运行了. 没有的话就按路由实例化controller

    , 觉得很赞
您需要登录后才可以回答。登录 | 立即注册
xyf90314
副总裁

xyf90314

注册时间:2015-03-04
最后登录:2023-03-13
在线时长:95小时23分
  • 粉丝21
  • 金钱5257
  • 威望40
  • 积分6607

热门问题