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