Laravel 請求週期

TylerZou發表於2019-02-16

Laravel 請求週期

載入 composer 自動載入器

require __DIR__.`/../bootstrap/autoload.php`;

獲取 Application 應用物件 Laravel 例項化應用解析

// 此 $app 物件貫穿全文
$app = require_once __DIR__.`/../bootstrap/app.php`;

主要過程:
    1. 設定基礎路徑
    2. 基礎繫結
    3. 註冊全域性基礎服務
    4. 核心容器別名設定
    5. 註冊三個單例

獲取 Kernel 物件 Laravel kernel例項化

// 此 $kernel 物件為 Laravel 應用的樞紐,將會協調各部分之間的工作,完成請求
$kernel = $app->make(IlluminateContractsHttpKernel::class);

主要過程:
    1. 注入應用物件
    2. 注入事件物件
    3. 注入路由集合物件
    4. 注入路由物件
    5. 將各中介軟體注入到路由物件

獲取 Request 物件

$request = IlluminateHttpRequest::capture()

主要過程:
    1. 委託SymfonyComponentHttpFoundationRequest元件,並注入全域性變數(封裝成相應的物件),建立基礎請求物件
    2. 通過基礎請求物件建立 $request

處理 Request 物件,返回 Response 物件 Laravel Kernel例項化後的處理 Laravel Kernel引導流程分析 Laravel 中介軟體 Laravel 路由處理 Laravel 響應準備 Laravel 路由執行

$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 的事件

相關文章