Laravel 文件中有跟我們介紹一個 request 的生命週期,也就是誕生到結束在 Laravel 中是如何運作。
應用程式的入口是從 public/index.php 文件中進去,所有請求都會由Web Server送到這個文件中,這個文件一開始會先生成定義 autoload,接著bootstrap/app.php會創建 Application/Service Container 實例。
接著,你的請求會被送到 HTTP kernel 或 console kernel,這取決於你是如何發送請求的,而在文件中會專注說明 HTTP kernel,也就是 app/Http/Kernel.php 這個檔案。
HTTP kernel 繼承 Illuminate\Foundation\Http\Kernel 這個類別,而這個類別定義了 bootstrappers 這個Array,這些 bootstrap 會在 request 被執行前執行,包含錯誤處理(error handling), 日誌(configure logging)等等,通常這些 Laravel 會幫你處理好,你不必太過在意他。
HTTP kernel 也有定義一個 middleware列表,說明在 http 被處理之前,必須先通過這些middleware才能繼續,包含讀取和寫入HTTP Session,驗證 CSRF 等等。
接著進入 HTTP kernel 中的 handle 方法,他裡面有個神奇的黑盒子,讓你的request進去後返回你一個response,至於這個黑盒子做了什麼,可以參考這篇文章。
在這個 kernel 中很重要的就是載入 Service Provider,而Application 中所有 Service Provider 都存在 config/app.php 配置文件的 providers 裡。
Laravel 會把 Service Provider 利用 register 方法一一實例化,接著執行 boot,而 boot 可以使用Service Provider。Service Provider 載入後,就可以使用這些組件了,例如數據庫、隊列、驗證和路由組件。Laravel 會提供這些主要的Service Provider 供其應用。其中很重要的 Provider 是路由,我們來看看 RouteServiceProvider 是如何執行的。
一旦 Service Provider 載入後,Request 就會叫由 Route 來分配,路由器會將請求分派給路由或控制器,並運行任何特定於路由的 Middleware,通過 Middleware 後路由或控制器(Controller)方法將被執行,路由或控制器(Controller)方法返回的 response 將通過路由的 Middleware 們回傳。
接著 前面的 handle 方法就回傳,index.php 接著利用 send 方法返回 response,send方法將response內容送到用戶的 Web 瀏覽器,生命週期就告一段落。
以上是透過 Laravel 官方文件說明整理出來的生命週期,看完後有比較了解整個 request 從件來到送 response 出去的大致流程,至於細節如 黑盒子的話以後有機會再來深入研究,今天就先到這邊。