Laravel 請求週期
載入 composer 自動載入器
require __DIR__.`/../bootstrap/autoload.php`;
// 此 $app 物件貫穿全文
$app = require_once __DIR__.`/../bootstrap/app.php`;
主要過程:
1. 設定基礎路徑
2. 基礎繫結
3. 註冊全域性基礎服務
4. 核心容器別名設定
5. 註冊三個單例
// 此 $kernel 物件為 Laravel 應用的樞紐,將會協調各部分之間的工作,完成請求
$kernel = $app->make(IlluminateContractsHttpKernel::class);
主要過程:
1. 注入應用物件
2. 注入事件物件
3. 注入路由集合物件
4. 注入路由物件
5. 將各中介軟體注入到路由物件
獲取 Request 物件
$request = IlluminateHttpRequest::capture()
主要過程:
1. 委託SymfonyComponentHttpFoundationRequest元件,並注入全域性變數(封裝成相應的物件),建立基礎請求物件
2. 通過基礎請求物件建立 $request
$response = $kernel->handle(
$request = IlluminateHttpRequest::capture()
);
主要過程:
1. 注入請求物件($request)
2. 根據配置項設定應用的執行環境(包括載入設定系統環境變數、載入配置檔案、設定系統錯誤異常、設定 Facade、註冊配置項的服務提供者、啟動服務提供者的引導項)並觸發相應的事件
3. 處理全域性中介軟體
4. 路由解析(請求分發、路由查詢、路由匹配、路由分離器設定、事件分發、路由執行)
5. 通過路由解析返回的 content 建立 $response 物件
6. 設定 $response 物件的響應頭
傳送響應
$response->send();
執行後續操作
$kernel->terminate($request, $response);
主要過程:
1. 獲取中介軟體,並嘗試觸發每個中介軟體的 terminate 方法
2. 觸發 terminate 的事件