1. 程式人生 > >Laravel學習:請求到響應的生命週期

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