ThinkPHP之HTTP請求流程

對於一個HTTP應用來講,從用戶發起請求到響應輸出結束,大體的標準請求流程以下:php

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

至此,當前請求流程結束。緩存

注:轉載於ThinkPHP官方手冊app

相關文章
相關標籤/搜索