一.初始化
(一)构造函数
- Yii::$app->loadedModules 将自己装入这个属性中[属性的属性]
- 初始化配置[路径;时区;将核心组件装入components配置中]
- 注入异常处理类[涉及到了_components[存对象]和_definitions[存id=>和各种属性包括class]以及各种创建对象的方法]
- 通过Yii::configure($this, $config);将所有配置中的属性加载到 yii\web\Application实例中
- 从子类中执行init()
(二)init()
-
设置网址目录别名
-
再次加载别名
-
加载bootstrap => log
二 . run
(一).yii\web\Application::handleRequest处理请求
1.将当前请求解析为路由和相关参数
2.runAction
1.createController
1.获取模块Module
2.递归获取控制器[在创建控制器的时候就实例化控制器的方法了,但是还未执行beforeAction]
2.通过获取的控制器和方法处理 业务[获取执行结果]
1.yii\base\Module::runAction中$result = $controller->runAction($actionID, $params);后才会执yii\base\Controller::runAction
1.创建行为 并将创建的行为放入Yii::$app->requestedAction
2.执行module的beforeAction 只要有一个是false就不再执行控制器的beforeAction
3.执行控制器的BeforeAction,放回true才执行下边,否则直接跳出
4.$action->runWithParams($params)执行控制器方法并获取结果
5.$result = $this->afterAction($action, $result);执行控制器的afterAction[业务控制器会覆盖父类的]
6.执行module中的afterAction
3.将上边的结果给响应对象的data属性[如果上边结果不为null]
3.响应!
4.结束