W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
當(dāng)我們使用現(xiàn)實(shí)世界中的任何工具時(shí),如果理解了該工具的工作原理,那么用起來(lái)就會(huì)得心應(yīng)手,應(yīng)用開(kāi)發(fā)也是如此。當(dāng)你理解了開(kāi)發(fā)工具如何工作,用起來(lái)就會(huì)更加游刃有余。
本文檔的目標(biāo)就是從一個(gè)更好、更高層面向你闡述Laravel框架的工作原理。通過(guò)對(duì)框架更全面的了解,一切都不再那么神秘,你將會(huì)更加自信的構(gòu)建應(yīng)用。
如果你不能馬上理解所有這些條款,不要失去信心!先試著掌握一些基本的東西,你的知識(shí)將會(huì)隨著對(duì)本文檔的探索而不斷提高。
Laravel應(yīng)用的所有請(qǐng)求入口都是public/index.php
文件,所有請(qǐng)求都會(huì)被web服務(wù)器(Apache/Nginx)導(dǎo)向這個(gè)文件。index.php
文件包含的代碼并不多,但是,這里是加載框架其它部分的起點(diǎn)。
index.php
文件載入Composer生成的自動(dòng)加載設(shè)置,然后從bootstrap/app.php
腳本獲取Laravel應(yīng)用實(shí)例,Laravel的第一個(gè)動(dòng)作就是創(chuàng)建服務(wù)容器實(shí)例。
接下來(lái),請(qǐng)求被發(fā)送到HTTP內(nèi)核或Console內(nèi)核,這取決于進(jìn)入應(yīng)用的請(qǐng)求類型。這兩個(gè)內(nèi)核是所有請(qǐng)求都要經(jīng)過(guò)的中央處理器,現(xiàn)在,就讓我們聚焦在位于app/Http/Kernel.php
的HTTP內(nèi)核。
HTTP內(nèi)核繼承自Illuminate\Foundation\Http\Kernel
類,該類定義了一個(gè)bootstrappers
數(shù)組,這個(gè)數(shù)組中的類在請(qǐng)求被執(zhí)行前運(yùn)行,這些bootstrappers
配置了錯(cuò)誤處理、日志、檢測(cè)應(yīng)用環(huán)境以及其它在請(qǐng)求被處理前需要執(zhí)行的任務(wù)。
HTTP內(nèi)核還定義了一系列所有請(qǐng)求在處理前需要經(jīng)過(guò)的HTTP中間件,這些中間件處理HTTP會(huì)話的讀寫(xiě)、判斷應(yīng)用是否處于維護(hù)模式、驗(yàn)證CSRF令牌等等。
HTTP內(nèi)核的標(biāo)志性方法handle處理的邏輯相當(dāng)簡(jiǎn)單:獲取一個(gè)Request,返回一個(gè)Response,把該內(nèi)核想象作一個(gè)代表整個(gè)應(yīng)用的大黑盒子,輸入HTTP請(qǐng)求,返回HTTP響應(yīng)。
內(nèi)核啟動(dòng)過(guò)程中最重要的動(dòng)作之一就是為應(yīng)用載入服務(wù)提供者,應(yīng)用的所有服務(wù)提供者都被配置在config/app.php
配置文件的providers
數(shù)組中。首先,所有提供者的register
方法被調(diào)用,然后,所有提供者被注冊(cè)之后,boot
方法被調(diào)用。
服務(wù)提供者負(fù)責(zé)啟動(dòng)框架的所有各種各樣的組件,比如數(shù)據(jù)庫(kù)、隊(duì)列、驗(yàn)證器,以及路由組件等,正是因?yàn)樗麄儐?dòng)并配置了框架提供的所有特性,服務(wù)提供者是整個(gè)Laravel啟動(dòng)過(guò)程中最重要的部分。
一旦應(yīng)用被啟動(dòng)并且所有的服務(wù)提供者被注冊(cè),Request將會(huì)被交給路由器進(jìn)行分發(fā),路由器將會(huì)分發(fā)請(qǐng)求到路由或控制器,同時(shí)運(yùn)行所有路由指定的中間件。
服務(wù)提供者是啟動(dòng)Laravel應(yīng)用中最關(guān)鍵的部分,應(yīng)用實(shí)例被創(chuàng)建后,服務(wù)提供者被注冊(cè),請(qǐng)求被交給啟動(dòng)后的應(yīng)用進(jìn)行處理,整個(gè)過(guò)程就是這么簡(jiǎn)單!
對(duì)Laravel應(yīng)用如何通過(guò)服務(wù)提供者構(gòu)建和啟動(dòng)有一個(gè)牢固的掌握非常有價(jià)值,當(dāng)然,應(yīng)用默認(rèn)的服務(wù)提供者存放在app/Providers
目錄下。
默認(rèn)情況下,AppServiceProvider
是空的,這里是添加自定義啟動(dòng)和服務(wù)容器綁定的最佳位置,當(dāng)然,對(duì)大型應(yīng)用,你可能希望創(chuàng)建多個(gè)服務(wù)提供者,每一個(gè)都有著更加細(xì)粒度的啟動(dòng)。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: