鍍金池/ 教程/ PHP/ 請(qǐng)求的生命周期
Laravel Cashier
Eloquent ORM
HTTP 響應(yīng)
發(fā)行說(shuō)明
擴(kuò)展包開發(fā)
HTTP 控制器
事件
擴(kuò)展框架
Contracts
開發(fā)
配置
表單驗(yàn)證
錯(cuò)誤與日志
Hashing
貢獻(xiàn)指南
郵件
Session
遷移與數(shù)據(jù)填充
查詢構(gòu)造器
Redis
升級(jí)向?qū)?/span>
概覽
緩存
服務(wù)提供者
Envoy 任務(wù)執(zhí)行器
隊(duì)列
單元測(cè)試
服務(wù)容器
文件系統(tǒng) / 云存儲(chǔ)
認(rèn)證
請(qǐng)求的生命周期
加密
模板
視圖 (View)
Laravel Homestead
Laravel 安裝指南
介紹
Command Bus
分頁(yè)
輔助方法
應(yīng)用程序結(jié)構(gòu)
HTTP 路由
HTTP 請(qǐng)求
基本用法
本地化
HTTP 中間件
結(jié)構(gòu)生成器
Facades
Laravel Elixir

請(qǐng)求的生命周期

簡(jiǎn)介

當(dāng)您使用「真實(shí)世界」中的任何工具時(shí),若能了解它是如何運(yùn)作的,您會(huì)更具信心。開發(fā)應(yīng)用程序也是一樣。當(dāng)您明白您的開發(fā)工具運(yùn)作的方式,使用它們時(shí),您會(huì)感到更舒適、更有信心。

這份文檔的目的在給予您一個(gè)優(yōu)良且高端的概述,關(guān)于 Laravel 框架是如何「運(yùn)作」的。當(dāng)您越了解整個(gè)框架,這些事情便不再那么令人感到「神奇」,而您在建立應(yīng)用程序時(shí)也會(huì)更具信心。

若您目前還無(wú)法了解所有的術(shù)語(yǔ),不要灰心!只要試著對(duì)現(xiàn)在提到的東西有個(gè)基本掌握,您的知識(shí)將會(huì)隨著您探索這份文檔其他章節(jié)的同時(shí)跟著成長(zhǎng)。

生命周期概要

首要之事

public/index.php 這個(gè)文件是對(duì) Laravel 應(yīng)用程序所有請(qǐng)求的進(jìn)入點(diǎn)。所有的請(qǐng)求都通過(guò)您網(wǎng)頁(yè)服務(wù)器(Apache / Ngix)的配置導(dǎo)向這個(gè)文件。 index.php 這個(gè)文件并沒(méi)有太多的代碼。更確切地說(shuō),它只是個(gè)起始點(diǎn),用來(lái)加載框架其他的部分。

index.php 加載由 Composer 產(chǎn)生的自動(dòng)加載器定義,并接收由 bootstrap/app.php 文件所產(chǎn)生的 Laravel 應(yīng)用程序?qū)嵗?。Laravel 自身的第一個(gè)動(dòng)作就是創(chuàng)建一個(gè)應(yīng)用程序 / 服務(wù)容器的實(shí)例。

HTTP / 終端核心

接下來(lái),進(jìn)入應(yīng)用程序的請(qǐng)求的會(huì)被送往 HTTP 核心或終端核心,視該請(qǐng)求的種類而定。這兩種核心是所有請(qǐng)求流向的中心位置?,F(xiàn)在開始,我們只將焦點(diǎn)放在 HTTP 核心,它位于 app/Http/Kernel.php。

HTTP 核心擴(kuò)展了 Illuminate\Foundation\Http\Kernel 類,它定義了一個(gè) bootstrappers 數(shù)組,在請(qǐng)求被執(zhí)行前會(huì)執(zhí)行。這些啟動(dòng)器(bootstrappers)會(huì)進(jìn)行配置錯(cuò)誤處理,日志記錄,偵測(cè)應(yīng)用程序環(huán)境,以及其他在請(qǐng)求真正被處理之前,需要完成的工作。

HTTP 核心也定義了一份 HTTP 中間件清單,所有的請(qǐng)求在被應(yīng)用程序處理之前都必須經(jīng)過(guò)它們。這些中間件有負(fù)責(zé)處理 HTTP session 的讀寫,決定應(yīng)用程序是否處于維護(hù)模式,查驗(yàn)跨站請(qǐng)求偽造(CSRF)標(biāo)記,以及其他更多的功能。

HTTP 核心 handle 方法的方法簽名相當(dāng)簡(jiǎn)單:它接收一個(gè) Request 并返回一個(gè) Response。把核心想像成一個(gè)大的黑盒子,用來(lái)代表你整個(gè)的應(yīng)用程序。對(duì)它輸入 HTTP 請(qǐng)求,它將返回 HTTP 響應(yīng)。

服務(wù)提供者

最重要的核心啟動(dòng)行為之一,是加載您的應(yīng)用程序的服務(wù)提供者。所有應(yīng)用程序的服務(wù)提供者,都在 config/app.php 配置文件的 providers 數(shù)組中被配置。首先,對(duì)所有的提供者調(diào)用 register 方法,一旦所有的提供者都被注冊(cè)之后,boot 方法也會(huì)被調(diào)用。

請(qǐng)求分派

當(dāng)應(yīng)用程序啟動(dòng)且所有的服務(wù)提供者都被注冊(cè)之后,Request 將被移轉(zhuǎn)給路由器進(jìn)行分派。路由器會(huì)將請(qǐng)求分派給路由或控制器,并執(zhí)行任何特定路由的中間件。

聚焦于服務(wù)提供者

服務(wù)提供者是啟動(dòng) Laravel 應(yīng)用程序的真正關(guān)鍵。創(chuàng)建應(yīng)用程序?qū)嵗?,注?cè)服務(wù)提供者,并將請(qǐng)求移轉(zhuǎn)至已啟動(dòng)的應(yīng)用程序。真的就是這么簡(jiǎn)單!

能確實(shí)掌握 Laravel 應(yīng)用程序是如何建立,并通過(guò)服務(wù)提供者啟動(dòng)是很有價(jià)值的。當(dāng)然,您應(yīng)用程序的默認(rèn)服務(wù)提供者存放在 app/Providers 這個(gè)目錄中。

AppServiceProviders 默認(rèn)幾乎是空的。此提供者是一個(gè)很好的地方,可讓您加入您應(yīng)用程序自身的啟動(dòng)及對(duì)服務(wù)容器的綁定。當(dāng)然,對(duì)大型應(yīng)用程序而言,您可能希望創(chuàng)建若干個(gè)服務(wù)提供者,每一個(gè)都具備更精細(xì)的啟動(dòng)類型。

上一篇:Redis下一篇:Facades