Yii1.1.x執行流程

來源:互聯網
上載者:User

 

原文出處:http://www.iprue.com/article/118/

首先是入口檔案,即index.php。(以下app代表專案檔夾,yii均代表架構主資料夾)。

載入了設定檔app/protected/config/main.php,這不是必須的。

載入架構基礎檔案yii/yii.php,這個類只是繼承了YiiBase,實質上是載入yii/YiiBase.php。所以以下如果出現一些靜 態方法Yii::xxx的,實質也就是YiiBase::xxx。(這個做法也給我們留下了以後想要修改YiiBase類的可能,具體以後再說。)

YiiBase類最主要的功能是註冊了自動載入類方法(spl_autoload_register),載入架構要用到所有介面(yii/base/interfaces.php)。

Yii::createWebApplication($config)->run();

用YiiBase::createWebApplication靜態方法,建立了CWebApplication(yii/web /CWebApplication.php)類執行個體,然後調用該父抽象類別CApplication(yii/base /CApplication.php)的run方法,並且該方法調用了該類的另一個抽象方法processRequest(),該抽象方法在 CWebApplication裡得到了實現。

OK,流程才正式開始……

CWebApplication->processRequest()通過UrlManager->parseUrl() (yii/web/CUrlManager.php),處理被Request(yii/web /CHttpRequest.php)normalizeRequest過的url地址。返回類似controllerID/actionID的地址,供 CWebApplication->runController調兵遣將。

通過CWebApplication->createController()找到相應Controller繼承自(yii/web /CController.php)並執行個體化,再調用CController->run()方法,初始化相應的action,最後執行action 即CController->runActionWithFilters()。這裡有幾個回呼函數:執行 CController->run()前會執行相應Controller的init方法,run action之前執行CWebApplication->beforeControllerAction()和 CController->beforeAction(),run action之後執行CController->afterAction()和 CWebApplication->afterControllerAction。注意先後順序!

因為不像Cakephp有自動渲染視圖的功能,所以Yii渲染視圖時,一律通過render或者renderXXX方法,去執行。

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.