Laravel 請求週期

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(Illuminate\Contracts\Http\Kernel::class);

主要過程:
    1. 注入應用對象
    2. 注入事件對象
    3. 注入路由集合對象
    4. 注入路由對象
    5. 將各中間件注入到路由對象

獲取 Request 對象

$request = Illuminate\Http\Request::capture()

主要過程:
    1. 委託\Symfony\Component\HttpFoundation\Request組件,並注入全局變量(封裝成相應的對象),建立基礎請求對象
    2. 經過基礎請求對象建立 $request

處理 Request 對象,返回 Response 對象 Laravel Kernel實例化後的處理 Laravel Kernel引導流程分析 Laravel 中間件 Laravel 路由處理 Laravel 響應準備 Laravel 路由執行

$response = $kernel->handle(
    $request = Illuminate\Http\Request::capture()
);

主要過程:  
    1. 注入請求對象($request)
    2. 根據配置項設置應用的運行環境(包括加載設置系統環境變量、加載配置文件、設置系統錯誤異常、設置 Facade、註冊配置項的服務提供者、啓動服務提供者的引導項)並觸發相應的事件
    3. 處理全局中間件
    4. 路由解析(請求分發、路由查找、路由匹配、路由分離器設置、事件分發、路由執行)
    5. 經過路由解析返回的 content 建立 $response 對象
    6. 設置 $response 對象的響應頭

發送響應

$response->send();

執行後續操做

$kernel->terminate($request, $response);

主要過程:
    1. 獲取中間件,並嘗試觸發每一箇中間件的 terminate 方法
    2. 觸發 terminate 的事件
相關文章
相關標籤/搜索