請求的生命週期
簡介
當您使用「真實世界」中的任何工具時,若能瞭解它是如何運作的,您會更具信心。開發應用程式也是一樣。當您明白您的開發工具運作的方式,使用它們時,您會感到更舒適、更有信心。
這份文件的目的在給予您一個優良且高階的概述,關於 Laravel 框架是如何「運作」的。當您愈瞭解整個框架,這些事情便不再那麼令人感到「神奇」,而您在建立應用程式時也會更具信心。
若您目前還無法瞭解所有的術語,不要灰心!只要試著對現在提到的東西有個基本掌握,您的知識將會隨著您探索這份文件其他章節的同時跟著成長。
生命週期概要
首要之事
public/index.php
這個檔案是對 Laravel 應用程式所有請求的進入點。所有的請求都透過您網頁伺服器(Apache / Nginx)的設定導向這個檔案。 index.php
這個檔案並沒有太多的程式碼。更確切地說,它只是個起始點,用來載入框架其他的部分。
index.php
載入由 Composer 產生的自動載入器定義,並接收由 bootstrap/app.php
指令稿所產生的 Laravel 應用程式實例。Laravel 自身的第一個動作就是創建一個應用程式 / 服務容器的實例。
HTTP / 終端核心
接下來,進入應用程式的請求的會被送往 HTTP 核心或終端核心,視該請求的種類而定。這兩種核心是所有請求流向的中心位置。現在開始,我們只將焦點放在 HTTP 核心,它位於 app/Http/Kernel.php
。
HTTP 核心擴展了 Illuminate\Foundation\Http\Kernel
此一類別,它定義了一個 bootstrappers
陣列,在請求被執行前會先行運作。這些啟動器(bootstrappers)設定錯誤處理,日誌記錄,偵測應用程式環境,並執行在請求真正被處理之前,需要完成的其他工作。
HTTP 核心也定義了一份 HTTP 中介層清單,所有的請求在被應用程式處理之前都必須經過它們。這些中介層負責處理 HTTP session 的讀寫,決定應用程式是否處於維護模式,查驗跨站請求偽造(CSRF)標記,以及其他更多工作。
HTTP 核心 handle
方法的方法簽名相當簡單:它接收一個 Request
並回傳一個 Response
。把核心想像成一個大的黑盒子,用來代表你整個的應用程式。對它輸入 HTTP 請求,它將回傳 HTTP 回覆。
服務提供者
最重要的核心啟動行為之一,是載入您的應用程式的服務提供者。所有應用程式的服務提供者,都在 config/app.php
此設定檔的 providers
陣列中被設定。首先,對所有的提供者呼叫 register
方法,一旦所有的提供者都被註冊之後,boot
方法也會被呼叫。
請求分派
當應用程式啟動且所有的服務提供者都被註冊之後,Request
將被移轉給路由器進行分派。路由器會將請求分派給路由或控制器,並執行任何特定路由的中介層。
聚焦於服務提供者
服務提供者是啟動 Laravel 應用程式的真正關鍵。創建應用程式實例,註冊服務提供者,並將請求移轉至已啟動的應用程式。真的就是這麼簡單!
能確實掌握 Laravel 應用程式是如何建立,並透過服務提供者啟動是很有價值的。當然,您應用程式的預設服務提供者存放在 app/Providers
此一目錄中。
AppServiceProviders
預設幾乎是空的。此提供者是一個很好的地方,可讓您加入您應用程式自身的啟動及對服務容器的綁定。當然,對大型應用程式而言,您可能希望創建若干個服務提供者,每一個都具備更精細的啟動類型。