应用执行流程:
index.php
|
require_once($yii)
|
|------------->yii.php
|
require(YiiBase.php)
|
|---------------->YiiBase.php
|
Define YII_XXX global variable
|
Define Class YiiBase
|
Autload Class YiiBase (自动加载类机制)
|
require interface.php
|
|<------------------|
|
define null Class Yii
|
|<--------------|
|
createWebApplication($config)---------->|
|
YiiBase::createApplication('CWebApplication',$config)
|
Create Instance of CWebApplication
|
|--------->CWebApplication
|
CApplication($config)构造函数
|
|------>|
setBasePath
|
set path alias
|
preinit() 空方法
|
initSystemHandlers()
|
configure($config) 将配置文件信息保存到Application
|
attachBehaviors()
|
preloadComponents() --> 装载在configure($config)中配置需要preload的components
|
init() |
|<------|
|
|<------------|
|
|<----------------------------------|
|
app->run()
|
|---->CWebApplication::processRequest()
|
|----> CWebApplication::runController($route)
|
|---->createController($route)
|
如果$route是空,添加默认controller,对于CWebApplication的controller是"site"
|
Controller类是SiteController,require该类文件
|
如果该类是CController的子类,修改id[0]为大写,创建该类的实例
|
|---->CSiteController
|
extends from Controller 这是客户化控制器的基本类,存在于components下
定义了页面的通用布局
|
使用CController构造函数创建对象CSiteController,具体初始化数据见yii-1.png
|
|<--------|
备份$this->_controller
$this->_controller = $controller
|
调用控制器类的init()方法,默认为空
|
调用控制器类的run()方法,默认为CController的run()
|
|---->createAction()
|
if($actionID==='') $actionID设置为$this->default ("index")
|
|Yes
|----> return CInlineAction($this, $actionID)
|No |
从Map创建 |
| 执行当前类CInlineAction的父类CAction的构造函数
| 设置_controller和$id
| |
|<---------------|
|
|
这里得到一个CAction的实例
|
$this->getModule()作为parent,为空则使用Yii::ap
|
$parent->beforeControllerAction() ??
|
$this->runActionWithFilters($action,$this->filters());
|
$parent->afterControllerAction($this,$action);
|<--------|
|
恢复原来的$oldController
|<-----------|
|
|<--------------|
|
End of processRequest()
|
|<-----------------|
|
End of app->run()

浙公网安备 33010602011771号