Laravel 的生命週期
1、Laravel 採用了單一入口模式,應用的所有請求入口都是 public/index.php 檔案。
2、註冊類檔案自動載入器 : Laravel通過 composer 進行依賴管理,無需開發者手動匯入各種類檔案,而由自動載入器自行匯入。
3、建立服務容器:從 bootstrap/app.php 檔案中取得 Laravel 應用例項 $app (服務容器)建立 HTTP / Console 核心:傳入的請求會被髮送給 HTTP 核心或者 console 核心進行處理
4、載入服務提供者至容器:在核心引導啟動的過程中最重要的動作之一就是載入服務提供者到你的應用,服務提供者負責引導啟動框架的全部各種元件,例如資料庫、佇列、驗證器以及路由元件。
5、分發請求:一旦應用完成引導和所有服務提供者都註冊完成,Request 將會移交給路由進行分發。路由將分發請求給一個路由或控制器,同時執行路由指定的中介軟體
Yii2生命週期1.使用者向入口指令碼 web/index.php 發起請求。
2.入口指令碼載入應用配置並建立一個應用 例項去處理請求。
3.應用通過請求元件解析請求的 路由。
4.應用建立一個控制器例項去處理請求。
5.控制器建立一個動作例項並針對操作執行過濾器。
6.如果任何一個過濾器返回失敗,則動作取消。
7.如果所有過濾器都通過,動作將被執行。
8.動作會載入一個數據模型,或許是來自資料庫。
9.動作會渲染一個檢視,把資料模型提供給它。
10.渲染結果返回給響應元件。
11.響應元件傳送渲染結果給使用者瀏覽器。
ThinkPHP生命週期1、入口檔案
// 應用入口檔案
index.php// 定義專案路徑
define('APP_PATH', __DIR__ . '/../application/');// 載入框架引導檔案require __DIR__ . '/../thinkphp/start.php';
2、引導檔案
接下來就是執行框架的引導檔案,start.php檔案就是系統預設的一個引導檔案。在引導檔案中,會依次執行下面操作:
3、註冊自動載入
系統會呼叫Loader::register()方法註冊自動載入,在這一步完成後,所有符合規範的類庫(包括Composer依賴載入的第三方類庫)都將自動載入。
4、註冊錯誤和異常機制
執行Error::register()註冊錯誤和異常處理機制。
在整個應用請求的生命週期過程中,如果丟擲了異常或者嚴重錯誤,均會導致應用提前結束,並響應輸出異常和錯誤資訊。
5、應用初始化
執行應用的第一步操作就是對應用進行初始化,包括:
· 載入應用(公共)配置;
· 載入擴充套件配置檔案(由extra_config_list定義);
· 載入應用狀態配置;
· 載入別名定義;
· 載入行為定義;
· 載入公共(函式)檔案;
· 註冊應用名稱空間;
· 載入擴充套件函式檔案(由extra_file_list定義);
· 設定預設時區;
· 載入系統語言包;
6、URL訪問檢測
應用初始化完成後,就會進行URL的訪問檢測,包括PATH_INFO檢測和URL字尾檢測。
所以,如果你的環境只能支援普通方式的URL引數訪問,那麼必須使用
http://serverName/index.php?s=/index/index/hello&val=value
7、路由檢測
· 路由到模組/控制器/操作;
· 路由到外部重定向地址;
· 路由到控制器方法;
· 路由到閉包函式;
· 路由到類的方法;
路由地址可能會受域名繫結的影響。
8、分發請求
在完成了URL檢測和路由檢測之後,路由器會分發請求到對應的路由地址,這也是應用請求的生命週期中最重要的一個環節。
在這一步驟中,完成應用的業務邏輯及資料返回。
建議統一使用return返回資料,而不是echo輸出,如非必要,請不要使用exit或者die中斷執行。
直接echo輸出的資料將無法進行自動轉換響應輸出的便利。
類的方法
除了以上方式外,還支援分發請求到類的方法,包括:靜態方法: 'blog/:id'=>'\\org\\\\util\\Blog::read' 類的方法:'blog/:id'=>'\\app\\index\\controller\\Blog@read'
9、響應輸出
控制器的所有操作方法都是return返回而不是直接輸出,系統會呼叫Response::send方法將最終的應用返回的資料輸出到頁面或者客戶端,並自動轉換成default_return_type引數配置的格式。所以,應用執行的資料輸出只需要返回一個正常的PHP資料即可。
10、應用結束
事實上,在應用的資料響應輸出之後,應用並沒真正的結束,系統會在應用輸出或者中斷後進行日誌儲存寫入操作。
系統的日誌包括使用者除錯輸出的和系統自動生成的日誌,統一會在應用結束的時候進行寫入操作。
而日誌的寫入操作受日誌初始化的影響。