Controller
Yii has three different controllers:
-
base\Controller.php the base class of other two
-
console\Controller.php console controller
-
web\Controller.php web controller
yii中创建控制器是在application中的request通过UrlManager解析得出路由信息,然后再由yii\base\Module中的方法来创建控制器,最后由控制器再执行相应的动作.
Yii中的路由分三种情况:
- 第一种是带有模块的(module id/controller id/action id),
- 第二种是带有命名空间(子目录)的(sub dir)/controller id/action id)
- 第三种是只有控制器和动作的(controller id/action id)
这三个有优先顺序,所以在创建控制器的时候,也是先查看是否是模块类型的路由,如果是,则获取这个模块,再由这个模块来创建控制器
接着再判断是否是第二种带有命名空间的。
contoller创建参见 yii/base/module中的createController和createControllerByID方法
Action
Sequence: resolve route —> run action —> create action
Runs a request specified in terms of a route.
Runs an action within this controller with the specified action ID and parameters.
Creates an action based on the given action ID.
Standalone Actions
There are two ways to create a action:
- inline actions :
- An inline action is defined as a method in the controller class.
- standalone actions :
- A standalone action is a class extending yii\base\Action or its child classes.
由createAction可知,当controller在创建action的时候,会根据动作ID先在Standalone Actions中的$actionMap数组里面查找,如果找到则返回这个动作。所以这里定义的动作的优先级要大于在控制器里面定义的actionXXX函数。
Binds the parameters to the action.
Web Controller Yii/web/controller
web controller 继承自 base controller.
Binds the parameters to the action.
Response in web controller