簡介
在現(xiàn)實(shí)中祝懂,如果你明白了你所使用工具的工作原理咕娄,你就會在使用的時候非常的自信。開發(fā)應(yīng)用并沒有什么不同奈梳,當(dāng)你弄懂了這些開發(fā)工具功能杈湾,你就會在使用時得心應(yīng)手。
這份文檔會深層次的帶你瀏覽 laravel 框架是如何工作的攘须。通過對框架更全面的了解漆撞,一切都會顯得不再那么神秘,你會更加自信的去構(gòu)建應(yīng)用阻课。
如果你并不能理解該文檔的所有內(nèi)容叫挟,請不要傷心艰匙。你需要先試著掌握一些基本的概念限煞,你的知識體系會隨著對文檔的探索而增長。
生命周期概述
第一件事
laravel 應(yīng)用中的所有請求的入口都是 pulic/index.php
文件员凝,所有的請求都會被導(dǎo)向該文件署驻。 index.php
文件中并沒有存儲太多的代碼,相反健霹,它只是用于裝載框架的其余部分的起始點(diǎn)旺上。
index.php
文件會加載 Composer 生成的自動加載器配置信息,然后從 bootstrap/app.php
文件中加載 laravel 應(yīng)用的實(shí)例糖埋,Laravel 的第一個動作就是創(chuàng)建一個服務(wù)容器的實(shí)例宣吱。
HTTP / Console 內(nèi)核
根據(jù)請求進(jìn)入應(yīng)用程序的類型,請求將會被分配到 HTTP 內(nèi)核 或 Console 內(nèi)核處理瞳别。這兩個內(nèi)核都會作為所有請求流經(jīng)過的中心處理器≌骱颍現(xiàn)在,讓我們只聚焦在 HTTP 內(nèi)核上祟敛,它被存儲在 app/Http/Kernel.php
文件中疤坝。
HTTP 內(nèi)核繼承自 Illuminate\Foundation\Http\Kernel
類,這個類定義了一個 bootstrappers
的數(shù)組馆铁,這些類會在請求被處理前運(yùn)行跑揉。這些 bootstrappers
執(zhí)行錯誤處理,日志埠巨,檢測當(dāng)前應(yīng)用環(huán)境的配置和提供一些其它在請求被處理前執(zhí)行的任務(wù)历谍。
HTTP 內(nèi)核也定義了一些 HTTP 中間件,所有請求在被處理前都會經(jīng)過這些中間件辣垒。這些中間件包括了讀寫 HTTP Session 的中間件望侈,判斷當(dāng)前站點(diǎn)是否是維護(hù)狀態(tài)的中間件,驗(yàn)證 CSRF Token 的中間件乍构,等等甜无。
HTTP 內(nèi)核的 handle
方法非常的簡單:接收一個 Request
返回一個 Response
扛点。你可以把這個核心想象成一個黑盒子,左邊 HTTP 請求進(jìn)去岂丘,右邊返回 HTTP 響應(yīng)陵究。
服務(wù)提供者
啟動內(nèi)核中最重要的一步就是為你的應(yīng)用加載服務(wù)提供者。所有的服務(wù)提供者都在 config/app.php
文件的 providers
數(shù)組中進(jìn)行配置奥帘。首先铜邮,所有經(jīng)過配置的提供者都會執(zhí)行其自身的 register
方法,然后當(dāng)所有提供者都完成注冊之后寨蹋,才會陸續(xù)的觸發(fā) boot
方法松蒜。
服務(wù)提供者主要負(fù)責(zé)啟動框架中的各個組件,比如數(shù)據(jù)庫組件已旧、隊列秸苗、驗(yàn)證和路由組件。因?yàn)榭蚣苤械母鞣N核心功能都是從這里被提供的运褪,所以服務(wù)提供者是整個框架啟動中最重要的一環(huán)惊楼。
分發(fā)請求
一旦應(yīng)用啟動完成并且所有的服務(wù)提供者都完成注冊,Request
將會移交到路由器進(jìn)行分發(fā)秸讹。路由器將會分發(fā)該請求到路由或者控制器中檀咙,同時也會經(jīng)過路由特定的中間件。
聚焦服務(wù)提供者
服務(wù)提供者是 laravel 應(yīng)用能夠成功啟動的最關(guān)鍵的部分璃诀。首先創(chuàng)建應(yīng)用的實(shí)例弧可,然后注冊服務(wù)提供者,再然后處理已經(jīng)啟動成功應(yīng)用的請求劣欢。整個請求流程就是這么簡單棕诵。
能夠深刻理解 laravel 是如何通過服務(wù)提供者進(jìn)行啟動和構(gòu)建應(yīng)用是非常有價值的。當(dāng)然你的應(yīng)用中默認(rèn)的服務(wù)提供者都被存儲在 app/Providers
目錄中氧秘。
默認(rèn)的年鸳,AppServiceProvider
是一個空的類,這里是你在應(yīng)用中添加自己的啟動項和做服務(wù)容器綁定的好去處丸相。當(dāng)然搔确,在大型應(yīng)用中,你可以自行的創(chuàng)建一些服務(wù)提供者灭忠,以使每一個提供者都具有單一的職責(zé)膳算。