Yii学习笔记【4】

应用执行流程:

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()

你可能感兴趣的:(学习笔记)