ThinkPHP5框架的生命周期:從發出請求到響應完成


URL請求的生命周期
客戶端通過URL發送訪問請求
服務器端返回請求數據

TP5的生命周期
入口文件-->引導文件-->注冊自動加載-->注冊錯誤和異常機制-->應用初始化-->URL訪問檢測-->路由檢測-->分發請求-->響應輸出-->應用結束

1.入口文件
-1.文件名:index.php;
-2.位置:public/index.php;
-3.用戶通過入口文件,發起服務請求,是整個應用的入口與起點;
-4.任務:定義常量,加載引導文件,不要放任何業務處理代碼;
-5.代碼: //定義項目路徑
define('APP_PATH',DIR.'/../application/');
//加載框架引導文件
require DIR.'/../thinkphp/start.php';

2.引導文件
-1.文件名:start.php;
-2.位置:thinkphp/start.php;
-.執行: 加載常量-->加載環境變量-->注冊自動加載-->注冊錯誤與異常-->加載管理配置-->執行應用

3.注冊自動加載
-1.類方法:Loader::register();
-2.作用:將所有符號規范的類庫(包括Composer依賴加載的第三方類庫)自動加載;
-3.執行流程: 注冊自動加載方法: think\Loader::autoload --> 注冊系統命名空間 --> 加載類庫映射文件 --> 注冊Composer自動加載 --> 注冊extends擴展目錄

4.注冊錯誤和異常機制
執行Error::register()注冊錯誤和異常處理1機制.
由三部分組成:
-1.應用關閉方法:think\Error::appShutdown
-2.錯誤處理方法:think\Error::appError
-3.異常處理方法:think\Error::appException

5.應用初始化
嚴格意義上講,前面的內容都可算做應用初始化部分:
加載公共配置 --> 加載公共擴展配置 -->加載應用狀態配置 --> 加載別名配置 -->
--> 加載行為定義 --> 加載公共函數文件 -->注冊應用命名空間 --> 加載擴展函數文件 --> 設置默認時區 --> 加載系統語言包

6.URL訪問檢測
URL必須是PATH_INFO格式才允許繼續運行.
1.PATH_INFO標准格式:
http://域名/index.php/模塊名/控制器名/操作名/參數鍵值對
舉例: http://tp5.com/index.php/index/user/add/id/10/name/peter
2.PHTH_INFO兼容格式:
http://域名/index.php?s=/模塊名/控制器名/操作名&參數鍵值對
舉例: http://tp5.com/index.php?s=index/user/add&id=10&name=peter

7.路由檢測
-1.如果開啟了url_route_on參數,則首先進行URL路由檢測;
-2.一旦檢測到匹配的路由,根據路由規則會注冊到相應的URL調度;
-3.TP5支持的路由規則如下:

  • 路由到模塊/控制器/操作;(這是默認路由模式,如果關閉路由或者路由檢測無效則執行該模式)
  • 路由到外部重定向地址;
  • 路由到控制器方法;
  • 路由到閉包函數;
  • 路由到類的方法;

8.分發請求
-1.將用戶請求分發到對應的路由地址,完成應用的業務邏輯並返回數據;
-2.統一使用return返回數據,不要用echo直接輸出;
-3.如非必要,請不要使用exit或者die中斷執行;
-4.分發請求支持TP5的五種路由地址模式:
路由到模塊/控制器/操作; 路由到外部重定向地址; 路由到控制器方法; 路由到閉包函數; 路由到類方法;

9.響應輸出
-1.控制器正常返回的數據通常是:字符串(String)或數組(Array)格式;
-2.統一使用return返回數據,而不是直接輸出,這樣可以自動調用
Response::send()方法將最終的返回數據輸出到頁面或者客戶端,
並自動轉換成default_return_type參數配置的格式(XML,JSON等).
return 'ThinkPHP教學教程';

10.應用結束
-1.響應輸出完成后,應用生命周期基本結束,可以寫日志報告啦;
-2.日志包括二部分:用戶調試輸出和系統自動生成;
-3.日志在應用結束后,自動寫入.

總結:介紹了TP5框架中,一個應用從發出url請求,到正確獲取到響應數據的完整流程.這里只是快速瀏覽,



作者:KMWY
鏈接:https://www.jianshu.com/p/d10515ad8323
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。


免責聲明!

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



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