架構(gòu) ―― 一次請求的生命周期

2018-02-24 15:38 更新

架構(gòu) —— 一次請求的生命周期

1、簡介

當(dāng)我們使用現(xiàn)實世界中的任何工具時,如果理解了該工具的工作原理,那么用起來就會得心應(yīng)手,應(yīng)用開發(fā)也是如此。當(dāng)你理解了開發(fā)工具如何工作,用起來就會更加游刃有余。

本文檔的目標(biāo)就是從一個更好、更高層面向你闡述Laravel框架的工作原理。通過對框架更全面的了解,一切都不再那么神秘,你將會更加自信的構(gòu)建應(yīng)用。

如果你不能馬上理解所有這些條款,不要失去信心!先試著掌握一些基本的東西,你的知識將會隨著對本文檔的探索而不斷提高。

2、生命周期概覽

2.1 第一件事

Laravel應(yīng)用的所有請求入口都是public/index.php文件,所有請求都會被web服務(wù)器(Apache/Nginx)導(dǎo)向這個文件。index.php文件包含的代碼并不多,但是,這里是加載框架其它部分的起點。

index.php文件載入Composer生成的自動加載設(shè)置,然后從bootstrap/app.php腳本獲取Laravel應(yīng)用實例,Laravel的第一個動作就是創(chuàng)建服務(wù)容器實例。

2.2?HTTP/Console?內(nèi)核

接下來,請求被發(fā)送到HTTP內(nèi)核或Console內(nèi)核,這取決于進(jìn)入應(yīng)用的請求類型。這兩個內(nèi)核是所有請求都要經(jīng)過的中央處理器,現(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)核還定義了一系列所有請求在處理前需要經(jīng)過的HTTP中間件,這些中間件處理HTTP會話的讀寫、判斷應(yīng)用是否處于維護(hù)模式、驗證CSRF令牌等等。

HTTP內(nèi)核的標(biāo)志性方法handle處理的邏輯相當(dāng)簡單:獲取一個Request,返回一個Response,把該內(nèi)核想象作一個代表整個應(yīng)用的大黑盒子,輸入HTTP請求,返回HTTP響應(yīng)。

2.2.1?服務(wù)提供者

內(nèi)核啟動過程中最重要的動作之一就是為應(yīng)用載入服務(wù)提供者,應(yīng)用的所有服務(wù)提供者都被配置在config/app.php配置文件的providers數(shù)組中。首先,所有提供者的register方法被調(diào)用,然后,所有提供者被注冊之后,boot方法被調(diào)用。

服務(wù)提供者負(fù)責(zé)啟動框架的所有各種各樣的組件,比如數(shù)據(jù)庫、隊列、驗證器,以及路由組件等,正是因為他們啟動并配置了框架提供的所有特性,服務(wù)提供者是整個Laravel啟動過程中最重要的部分。

2.2.2 分發(fā)請求

一旦應(yīng)用被啟動并且所有的服務(wù)提供者被注冊,Request將會被交給路由器進(jìn)行分發(fā),路由器將會分發(fā)請求到路由或控制器,同時運行所有路由指定的中間件。

3、聚焦服務(wù)提供者

服務(wù)提供者是啟動Laravel應(yīng)用中最關(guān)鍵的部分,應(yīng)用實例被創(chuàng)建后,服務(wù)提供者被注冊,請求被交給啟動后的應(yīng)用進(jìn)行處理,整個過程就是這么簡單!

對Laravel應(yīng)用如何通過服務(wù)提供者構(gòu)建和啟動有一個牢固的掌握非常有價值,當(dāng)然,應(yīng)用默認(rèn)的服務(wù)提供者存放在app/Providers目錄下。

默認(rèn)情況下,AppServiceProvider是空的,這里是添加自定義啟動和服務(wù)容器綁定的最佳位置,當(dāng)然,對大型應(yīng)用,你可能希望創(chuàng)建多個服務(wù)提供者,每一個都有著更加細(xì)粒度的啟動。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號