請求周期
請求周期
請求生命周期
介紹
在「日常生活」中 使用任何工具時,如果理解了該工具的工作原理。那么用起來就會更加得心應(yīng)手。應(yīng)用開發(fā)也是如此,當(dāng)你能真正懂得一個功能背后實現(xiàn)原理時,用起來會更加順手,方便。
文檔存在目的是為了讓你更加清晰地了解 Laravel 框架是如何工作。通過框架進行全面了解,讓一切都不再感覺很「神奇」。相信我,這有助于你更加清楚自己在做什么,對自己想做的事情更加胸有成竹。就算你不明白所有的術(shù)語,也不用因此失去信心!只要多一點嘗試、學(xué)著如何運用,隨著你瀏覽文檔的其他部分,你的知識一定會因此增長。
生命周期概述
首先
Laravel 應(yīng)用的所有請求入口都是 public/index.php
文件。而所有的請求都是經(jīng)由你的 Web 服務(wù)器(Apache/Nginx)通過配置引導(dǎo)到這個文件。 index.php
文件代碼并不多,但是,這里是加載框架其它部分的起點。
index.php
文件加載 Composer 生成的自動加載設(shè)置,然后從 bootstrap/app.php
腳本中檢索 Laravel 應(yīng)用程序的實例。 Laravel 本身采取的第一個動作是創(chuàng)建一個應(yīng)用程序 / 服務(wù)容器。
HTTP / Console 內(nèi)核
接下來, 根據(jù)進入應(yīng)用程序的請求類型來將傳入的請求發(fā)送到 HTTP 內(nèi)核或控制臺內(nèi)核。而這兩個內(nèi)核是用來作為所有請求都要通過的中心位置。 現(xiàn)在,我們先看看位于 app/Http/Kernel.php
中的 HTTP 內(nèi)核。
HTTP 內(nèi)核繼承了 Illuminate\Foundation\Http\Kernel
類,該類定義了一個 bootstrappers
數(shù)組。 這個數(shù)組中的類在請求被執(zhí)行前運行,這些 bootstrappers 配置了錯誤處理, 日志, 檢測應(yīng)用環(huán)境,以及其它在請求被處理前需要執(zhí)行的任務(wù)。
HTTP 內(nèi)核還定義了所有請求被應(yīng)用程序處理之前必須經(jīng)過的 HTTP 中間件 ,這些中間件處理 HTTP 會話 讀寫、判斷應(yīng)用是否處于維護模式、 驗證 CSRF 令牌 等等。
HTTP 內(nèi)核的 handle
方法簽名相當(dāng)簡單:獲取一個 Request
,返回一個 Response
??梢园言搩?nèi)核想象作一個代表整個應(yīng)用的大黑盒子,輸入 HTTP 請求,返回 HTTP 響應(yīng)。
服務(wù)提供者
內(nèi)核啟動操作中最重要的便是你應(yīng)用的 服務(wù)提供者 了。所有應(yīng)用下的服務(wù)提供者均配置到了 config/app.php
配置文件中的 providers
數(shù)組中。 第一步,所有服務(wù)提供者的 register
方法會被調(diào)用,然后一旦所有服務(wù)提供者均注冊后, boot
方法才被調(diào)用。
服務(wù)提供者給予框架開啟多種多樣的組件,像數(shù)據(jù)庫,隊列,驗證器,以及路由組件。只要被啟動服務(wù)提供者就可支配框架的所有功能,所以服務(wù)提供者也是 Laravel 整個引導(dǎo)周期最重要組成部分。
請求調(diào)度
一旦啟動且所有服務(wù)提供者被注冊,Request
會被遞送給路由。路由將會調(diào)度請求,交給綁定的路由或控制器,也當(dāng)然包括路由綁定的中間件。
聚焦服務(wù)提供者
服務(wù)提供者是 Laravel 真正意義的生命周期中的關(guān)鍵。應(yīng)用實例一旦創(chuàng)建,服務(wù)提供者就被注冊,然后請求被啟動的應(yīng)用接管。簡單吧!
牢牢掌握服務(wù)提供者的構(gòu)建和其對 Laravel 應(yīng)用處理機制的原理是非常有價值的。當(dāng)然,你的應(yīng)用默認(rèn)的服務(wù)提供會存放在 app/Providers
下面。
默認(rèn)的, AppServiceProvider
是空白的。這個提供者是一個不錯的位置,用于你添加應(yīng)用自身的引導(dǎo)處理和服務(wù)容器綁定。當(dāng)然,大型項目中,你可能希望創(chuàng)建數(shù)個粒度更精細的服務(wù)提供者。