Controller.php源码 [ 2.0 版本 ]
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;
}
共 2 个回答
-
1, $id, $module这2个值谁传进来的 ?
是
Module
传进来的;Module
通过路由
orcontrollerMap
得到controller
的Id
, 再把自身传进来, 就实例化出controller
了;2, 基础版中,没有模块,
getModules()
方法为什么运行进来,什么时候调用的 ?首先 基础版中, 是有模块的, 并且可以嵌套多层;
Yii
本身就是建立在Module
的基础上,Yii::$app
也是一个Module
.至于什么时候调用,
在框架中, 触发
controller
中的beforeAction
和afterAction
事件时, 会调用祖宗Module
执行相应的事件.对于开发者来说, 你通过
controller
调用getModules
方法 , 或者 访问controller
的modules
属性时候 就调用了共 5 条回复luoxiao , KillMeAgain 觉得很赞
xyf90314
注册时间:2015-03-04
最后登录:2023-03-13
在线时长:95小时23分
最后登录:2023-03-13
在线时长:95小时23分
- 粉丝21
- 金钱5257
- 威望40
- 积分6607