Laravel最早接觸是剛開始實習的時候,那時通過網上的學習資料很快便上手,開發模塊接口。后來沒有什么深入和總結,但是當我剛開始學Laravel的時候,我對Laravel最大的認識就是,框架除了路由、中間件和 MVC
設計以外,基本所有的功能都是以模塊服務的方式提供,而且在學習Laravel的會讓自己有學習設計模式的意識,感覺很受啟發。下面是對Laravel 5.x 啟動過程以及 Http
請求處理過程的源碼簡要分析。
入口文件
Laravel和大多數框架一樣采用同樣的單一入口方式,Laravel的入口文件位於public/index.php
,所有的請求都通過你的網頁服務器(Apache
/ Nginx
)的設置導向這個文件。index.php 這個文件並沒有太多的代碼。更確切地說,它只是個起始點,用來加載框架的其它部分。
index.php
此文件會加載由 Composer
生成的自動加載器定義,並獲取由 bootstrap/app.php
文件中所生成的 Laravel
應用程序實例。Laravel
自身的第一個動作就是創建一個應用程序/服務容器的實例。
HTTP/終端核心
接下來,進入應用程序的請求的會被送往 HTTP
核心或終端核心,視該請求的種類而定。這兩種核心是所有請求流向的中心位置。現在開始,我們只將焦點放在 HTTP
核心,它位於 app/Http/Kernel.php
。
HTTP
核心擴展了 Illuminate\Foundation\Http\Kernel
類,它定義了一個 bootstrappers
數組,在請求被運行前會先行運作。這些啟動器設置了錯誤處理、日志記錄、偵測應用程序環境,並運行其它需要在請求實際處理前就該被完成掉的工作。
HTTP
核心也定義了一份 HTTP
中間件清單,所有的請求在被應用程序處理之前都必須經過它們。這些中間件處理 HTTP
session
的讀寫、驗證 CSRF
令牌、決定應用程序是否處於維護模式,以及其它更多任務作。
HTTP
核心 handle
方法的方法簽章相當簡單:接收一個 Request
並返回一個 Response
。把核心想像成一個大的黑盒子,代表你完整的應用程序。喂給它 HTTP
請求,它就會傳回 HTTP
響應。
服務提供者
最重要的核心啟動加載行為之一,是加載你的應用程序的服務提供者。應用程序的所有服務提供者,都在 config/app.php
此配置文件的 providers
數組中被設置。首先,所有提供者的 register
方法會被調用,一旦所有提供者都被注冊之后,boot
方法就會被調用。
服務提供者負責在啟動時加載框架的所有組件,例如數據庫、隊列、驗證、以及路由組件。服務提供者啟動加載並設置框架提供的各種功能,是整個 Laravel
啟動加載過程中最重要的面向。
服務提供者是啟動 Laravel
應用程序的真正關鍵。應用程序的實例被創建、服務提供者被注冊、請求被移轉至已啟動的應用程序。真正掌握 Laravel
應用程序是如何創建並通過服務提供者啟動,將是很有價值的。當然,應用程序默認的服務提供者存放在 app/Providers
此一目錄下。
源碼分析過程
上面部分是結合文檔的理論部分,可能會比較難理解,下面通過源碼的方式分析一下整個過程。因為在word文檔上整理的分析過程,而且顯示的效果會比較好,所以整個分析過程就用截圖的方式記錄。
以上包括Laravel 5.x 啟動過程以及 Http
請求處理過程的基本處理流程,大家可以對照框架的源碼一步一步學習,希望能夠幫助大家。
轉載請注明出處。
作者:wuxiwei
出處:http://www.cnblogs.com/wxw16/p/6218742.html