Laravel學習:請求到響應的生命週期
Laravel請求到響應的整個執行過程,主要可以歸納為四個階段,即程式啟動準備階段、請求例項化階段、請求處理階段、響應傳送和程式終止階段。
程式啟動準備階段
- 服務容器例項化
服務容器的例項化和基本註冊,包括了服務容器本身註冊、基礎服務提供者註冊、核心類別名註冊和應用的基本路徑註冊。註冊的服務只是具體的類名,是通過反射機制來例項化物件,並且通過反射機制自動解決建構函式中的依賴關係。
- 核心類例項化
核心類例項化是服務容器例項化後,通過核心類別名註冊服務來得到的服務容器自動例項化物件。如:index.php中的Kernel類例項化:
$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);
請求例項化階段
請求是客戶端傳送的一個請求報文,包括請求行、請求首部和請求實體。Laravel將其分類並儲存在Illuminate\Http\Request
類的例項物件中,也就是說將請求轉化為一個例項物件。請求例項的建立是通過Illuminate\Http\Request
類的capture()靜態方法完成的,即:
$request = Illuminate\Http\Request::capture();
但在capture()方法中,可以看出Laravel的請求例項是在Symfony請求例項的基礎上建立的。而Symfony是通過PHP的全域性陣列$_GET、$_POST、$_COOKIE、$_FILE和$_SERVER作為引數來例項化請求的。
請求處理階段
請求處理階段首先是準備請求處理的環境,包括環境載入、服務提供者註冊等環節,然後將請求例項通過中介軟體處理及通過路由和控制器的分發控制,使得不同的請求通過相應的處理程式進行處理並生成響應的過程。
響應傳送和程式終止階段
- 響應傳送
Laravel的響應處理類是Illuminate\Http\Response
類,該類的底層也是在Symfony的Response類。響應的傳送包括兩部分內容:響應頭資訊的傳送和響應主體內容的傳送。
- 程式終止
Laravel中,終止程式主要是完成終止中介軟體的呼叫。
原文地址:https://segmentfault.com/a/1190000015838318