前陣子看了點Laravel源碼,越看越亂,網(wǎng)上大部分中文文檔都是直譯,比較生澀難懂,還是決定看英文文檔順便就我的理解做下翻譯整理記錄下來
思維導圖
引言
在現(xiàn)實生活中當你使用工具的時候,如果你知道工具如何運作的話,你會用起來更自信。應(yīng)用開發(fā)也是如此。如果你理解開發(fā)工具的如何工作的,你用起來就會更舒服和自信。
這篇文檔的目的就是告訴你Laravel框架是如何工作的。通過更好的了解全部框架,所有東西就變得不是那么神奇,你將更有信心的創(chuàng)建你自己的應(yīng)用。
如果你無法立刻理解所有的細節(jié),不要失去信心!盡力理解最基本的東西,當你看其他章節(jié)的時候你會理解的越來愈多。
生命周期概述
首先
Laravel應(yīng)用所有請求的入口點是public/index.php。所有的請求被你的web服務(wù)器(Apache/Nginx)配置定向到這個文件。index.php代碼很少。它只是加載其它框架的簡單起點。
index.php首先加載Composer生成的autoloader定義,然后從bootstrap/app.php中腳本獲取Laravel application實例。Laravel第一個動作就是創(chuàng)建一個application或者說service container實例。
HTTP/Console 核心
下一步,進來的請求會根請求類型發(fā)送到HTTP Kernel或者Console Kernel。這2個核心處在所有請求經(jīng)過的中心位置?,F(xiàn)在,我們只是把重心放在Http Kernel,它位于app/Http/Kernel.php。
Http Kernel繼承于Illuminate\Foundation\Http\Kernel,它在bootstrappers數(shù)組里定義一些引導程序,它們會在請求被處理前運行。這些引導程序的作用是配置錯誤處理、配置日志、確定應(yīng)用環(huán)境,然后執(zhí)行一些請求被實際操作前需要做的任務(wù)。
Http Kernel還定義了一些Http middleware,所有請求被應(yīng)用程序使用前必須通過它們。這些中間件負責HttpSession的讀寫,確定應(yīng)用是否在維修狀態(tài),核實CSRF token等等。
HTTP Kernel的 handle方法的方法簽名很簡單:接收一個Request然后返回 Response。想象一下,Kernel變成一個象征整個應(yīng)用程序的大黑盒,給它灌Http Request然后它還給你HTTP Response
服務(wù)提供者
Kernel最重要的引導動作之一就是為應(yīng)用程序加載service providers。所有服務(wù)提供者被配置在config/app.php配置文件中的providers數(shù)組中。所有providers的register方法會先被調(diào)用,一旦所有providers都注冊了,就會呼叫boot方法。
Service providers的職責是引導框架中各種各樣的組件,比如數(shù)據(jù)庫,隊列,驗證和路由組件。由于引導和配置了框架提供的每個特色服務(wù),它們是整個Laravel引導程序中最重要的部分。
分發(fā)請求
當應(yīng)用被引導完,服務(wù)提供者被注冊好之后,Request將被移交給路由器來分發(fā)。路由器將把請求發(fā)送給一個路由或者控制器以及任何路由特性的中間件。
關(guān)注服務(wù)提供者
毫無疑問,服務(wù)器提供者是引導Laravel應(yīng)用的關(guān)鍵。應(yīng)用實例被創(chuàng)建,服務(wù)提供者被注冊,最后獲取請求來引導應(yīng)用。就是那么簡單。
深刻理解Laravel應(yīng)用如何通過服務(wù)提供者被創(chuàng)建和引導起來是很有價值的。當然,服務(wù)提供者默認被存放在app/Providers目錄下。
默認地,AppServiceProvider里面相當干凈。這個provider很重要,你可以在里面添加你應(yīng)用自己的引導程序和服務(wù)容器綁定。當然,對于大型應(yīng)用,你可能希望創(chuàng)建多個service provider,各自都帶一個更顆?;囊龑С绦颉?/p>
