對於一個HTTP應用來講,從用戶發起請求到響應輸出結束,大體的標準請求流程以下:php
- 加載Composer的自動加載(autoload)文件
- 實例化系統應用基礎類think\App
- 獲取應用目錄等相關路徑信息
- 加載全局的服務提供provider.php文件
- 設置容器實例及應用對象實例,確保當前容器對象惟一
- 從容器中獲取Http應用類think\Http
- 執行Http應用類的run方法啓動一個Http應用
- 獲取當前請求對象實例(默認爲app\Request繼承think\Request)保存到容器
- 執行think\App的初始化方法initialize
- 加載環境變量文件.env和全局變量文件
- 加載全局公共文件、系統助手函數、全局配置文件、全局事件定義和全局服務定義
- 判斷應用模式(調試或部署模式)
- 監聽AppInit事件
- 註冊異常處理
- 服務註冊
- 啓動註冊的服務
- 加載全局中間件定義
- 監聽HttpRun事件
- 執行全局中間件
- 執行路由調度(Route類dispatch方法)
- 若是開啓路由則檢查路由緩存
- 加載路由定義
- 監聽RouteLoaded事件
- 若是開啓註解路由則檢測註解路由
- 路由檢測
- 路由調度對象(think\route\Dispatch初始化)
- 設置當前請求的控制器和操做名
- 註冊路由中間件
- 綁定數據模型
- 設置路由額外參數
- 執行數據自動驗證
- 執行路由調度子類exec方法返回響應think\Response對象
- 獲取當前請求的控制器對象實例
- 利用反射機制註冊控制器中間件
- 執行控制器方法以及先後置中間件
- 執行當前響應對象的send方法輸出
- 執行Http應用對象的end方法善後
- 監聽HttpEnd事件
- 執行中間件的end回調
- 寫入當前請求的日誌信息
至此,當前請求流程結束。緩存
注:轉載於ThinkPHP官方手冊app