ThinkPHP通路流程在手冊1.11系統流程裡就有介紹,我閱讀的ThinkPHP的版本是3.1.3,大家可以看下手冊,基本的流程也有,現在就是詳細去介紹一下ThinkPHP的通路流程.(調試模式下的,在部署模式下,會把中間的URL解析,檔案加載之類的,都封裝到一個檔案裡)
1.入口檔案(index.php)
入口檔案最常見得就是index.php,而在這裡可以定義項目名稱,路徑,緩存檔案存放路徑之類的.最後要加載Thinkphp/ThinkPHP.php
指向下一個檔案的地方是require 'ThinkPHP/ThinkPHP.php';
2.ThinkPHP/ThinkPHP.php
這個檔案定義基本的系統目錄常量,架構引擎判斷,以及部署模式和調試模式的判斷
指向下一個檔案的地方是 require THINK_PATH.'Common/runtime.php';
3.runtime.php(~runtime.php)
PHP環境判斷,URL定義,項目目錄常量定義,核心檔案加載,項目目錄生成.
指向下一個檔案的地方是Think::Start();
4.Think.class.php
錯誤方式定義,異常定義,設定自動加載,緩存配置參數,語言參數等
App::run();
5.App.class.php
設定時區,加載動态的項目公共檔案和配置檔案,一些系統常量的定義,如(IS_POST)等,POST,GET等傳值過濾,
指向下一個檔案的地方是Dispatcher::dispatch();在App.class.php的第38行
6.Dispatcher.class.php
URL解析,擷取分組,子產品,操作名,包括URL四種方式的詳細定義,URL路由都在這裡定義的.
解析完成以後回到App.class.php并且執行App.exec
7.App.class.php App::exec
執行應用程式,包括前置和後置操作執行,目前方法執行,以及空子產品判斷,(如IndexAction.class.php等,就會在這裡直接執行)
在執行IndexAction.class.php的時候,有extends繼承Action.class.php
8.Action.class.php基類
執行個體化視圖類 指派,傳值給View,擷取Action,ajax判斷,這裡面的方法很多,值得仔細研究下.
在調用assign,display,show等方法的時候,會到View中操作.
9.View.class.php 視圖類
包括擷取IndexAction.class.php中定義的變量,以及解析模闆,輸出模闆等功能
執行下一檔案的方法 tag('view_parse',$params);在View.class.php View::fetch的方法中.
10. ParseTemplateBehavior.class.php 模闆解析
其實是對緩存的判斷以及對采用哪種模闆引擎去解析模闆.
在$tpl = Think::instance('ThinkTemplate'); 在第62行