請求週期
- 聚焦服務提供者
- 介紹 在「日常生活」中使用任何工具時,如果了解工具的工作原理。那麼用起來就會更加得心應手。應用程式開發也是如此,當你能真正懂得一個功能背後實現原理時,用起來會更順手,方便。
文件存在目的是為了讓你更清楚地了解 Laravel 框架是如何運作。透過框架進行全面了解,讓一切不再感覺很「神奇」。相信我,這有助於你更清楚自己在做什麼,對自己想做的事更胸有成竹。就算你不懂所有的用語,也不用因此失去信心!只要多一點嘗試、學著如何運用,隨著你瀏覽文件的其他部分,你的知識一定會因此增長。
#生命週期概述
#首先
Laravel 應用程式的所有請求入口都是 public/index.php
檔案。而所有的請求都是經由你的 Web 伺服器(Apache/Nginx)透過設定引導到這個檔案。 index.php
檔案程式碼不多,但是,這裡是載入框架其它部分的起點。
index.php
檔案載入 Composer 產生的自動載入設置,然後從 bootstrap/app.php
腳本中擷取 Laravel 應用程式的實例。 Laravel 本身採取的第一個動作是建立一個應用程式 / 服務容器。
HTTP / Console 核心
接下來, 根據進入應用程式的請求類型來將傳入的請求傳送到 HTTP 核心或控制台核心。而這兩個核心是用來作為所有請求都要通過的中心位置。現在,我們先來看看位於 app/Http/Kernel.php
中的 HTTP 核心。
HTTP 核心繼承了 Illuminate\Foundation\Http\Kernel
類,定義了一個 bootstrappers
陣列。這個數組中的類別在請求被執行前運行,這些 bootstrappers 配置了錯誤處理, 日誌, 檢測應用環境,以及其它在請求被處理前需要執行的任務。
HTTP 核心也定義了所有請求被應用程式處理之前必須經過的 HTTP 中間件 ,這些中間件處理 HTTP 會話 讀寫、判斷應用是否處於維護模式、 驗證 CSRF 令牌 等等。
HTTP 核心的 handle
方法簽章相當簡單:取得一個 Request
,回傳一個 Response
。可以把該核心想像作一個代表整個應用程式的大黑盒子,輸入 HTTP 請求,回傳 HTTP 回應。
服務提供者
核心啟動操作中最重要的便是你應用的 服務提供者 了。所有應用程式下的服務提供者都配置到了 config/app.php
設定檔中的 providers
陣列中。第一步,所有服務提供者的 register
方法會被調用,然後一旦所有服務提供者均註冊後, boot
方法才被調用。
服務提供者給予框架開啟多種多樣的元件,像資料庫,佇列,驗證器,以及路由元件。只要被啟動服務提供者就可支配框架的所有功能,所以服務提供者也是 Laravel 整個引導週期最重要組成部分。
請求調度
一旦啟動且所有服務提供者被註冊,Request
會被遞送給路由。路由將會調度請求,交給綁定的路由或控制器,也當然包括路由綁定的中間件。
聚焦服務提供者
服務提供者是 Laravel 真正意義的生命週期中的關鍵。應用實例一旦被創建,服務提供者就被註冊,然後請求啟動的應用程式接管。簡單吧!
牢牢掌握服務提供者的建構和其對 Laravel 應用處理機制的原理是非常有價值的。當然,你的應用程式預設的服務提供會存放在 app/Providers
下面。
預設的, AppServiceProvider
是空白的。這個提供者是一個不錯的位置,用於你添加應用自身的引導處理和服務容器綁定。當然,在大型專案中,你可能希望創建數個粒度更精細的服務提供者。