yii中创建控制器的是在application中的request通过UrlManager解析得出路由信息的,然后再由yii\base\Module中的
方法来创建控制器,最后由控制器再执行相应的动作。
首先得明确,Yii中的路由分三种情况:
这三个有优先顺序,所以在创建控制器的时候,也是先查看是否是模块类型的路由,如果是,则获取这个模块,再由这个模块来创建控制器
接着再判断是否是第二种带有命名空间的。
- public function runAction($route, $params = [])
首先得明确,Yii中的路由分三种情况:
- 第一种是带有模块的(module id/controller id/action id),
- 第二种是带有命名空间(子目录)的(sub dir)/controller id/action id)
- 第三种是只有控制器和动作的(controller id/action id)
这三个有优先顺序,所以在创建控制器的时候,也是先查看是否是模块类型的路由,如果是,则获取这个模块,再由这个模块来创建控制器
接着再判断是否是第二种带有命名空间的。
- public function createController($route)
- {
- //如果路由为空,则使用默认的路由
- if ($route === '') {
- $route = $this->defaultRoute;
- }
- // double slashes or leading/ending slashes may cause substr problem
- //去掉首尾的反斜杠(“/”),如果路由中包含有“//”,则返回false创建失败。
- $route = trim($route, '/');
- if (strpos($route, '//') !== false) {
- return false;
- }
- /*
- * 路由分三种情况,
- * 一种是带模块id的(module id/controller id/action id),
- * 一种是有命名空间(子目录