ThinkPHP之HTTP請求流程


對於一個HTTP應用來說,從用戶發起請求到響應輸出結束,大致的標准請求流程如下:

  • 加載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官方手冊


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM