Laravel 5.x 請求的生命週期(附源碼)

Laravel最先接觸是剛開始實習的時候,那時經過網上的學習資料很快便上手,開發模塊接口。後來沒有什麼深刻和總結,可是當我剛開始學Laravel的時候,我對Laravel最大的認識就是,框架除了路由、中間件和 MVC 設計之外,基本全部的功能都是以模塊服務的方式提供,並且在學習Laravel的會讓本身有學習設計模式的意識,感受很受啓發。下面是對Laravel 5.x 啓動過程以及 Http 請求處理過程的源碼簡要分析。php

入口文件

Laravel和大多數框架同樣採用一樣的單一入口方式,Laravel的入口文件位於public/index.php,全部的請求都經過你的網頁服務器(Apache / Nginx)的設置導向這個文件。index.php 這個文件並無太多的代碼。更確切地說,它只是個起始點,用來加載框架的其它部分。html

index.php 此文件會加載由 Composer 生成的自動加載器定義,並獲取由 bootstrap/app.php 文件中所生成的 Laravel 應用程序實例。Laravel 自身的第一個動做就是建立一個應用程序/服務容器的實例。數據庫

HTTP/終端核心

接下來,進入應用程序的請求的會被送往 HTTP 核心或終端核心,視該請求的種類而定。這兩種核心是全部請求流向的中心位置。如今開始,咱們只將焦點放在 HTTP 核心,它位於 app/Http/Kernel.phpbootstrap

HTTP 核心擴展了 Illuminate\Foundation\Http\Kernel 類,它定義了一個 bootstrappers 數組,在請求被運行前會先行運做。這些啓動器設置了錯誤處理、日誌記錄、偵測應用程序環境,並運行其它須要在請求實際處理前就該被完成掉的工做。設計模式

HTTP 核心也定義了一份 HTTP 中間件清單,全部的請求在被應用程序處理以前都必須通過它們。這些中間件處理 HTTP session 的讀寫、驗證 CSRF 令牌、決定應用程序是否處於維護模式,以及其它更多任務做。數組

HTTP 核心 handle 方法的方法簽章至關簡單:接收一個 Request 並返回一個 Response。把核心想像成一個大的黑盒子,表明你完整的應用程序。餵給它 HTTP 請求,它就會傳回 HTTP 響應。服務器

服務提供者

最重要的核心啓動加載行爲之一,是加載你的應用程序的服務提供者。應用程序的全部服務提供者,都在 config/app.php 此配置文件的 providers 數組中被設置。首先,全部提供者的 register 方法會被調用,一旦全部提供者都被註冊以後,boot 方法就會被調用。session

服務提供者負責在啓動時加載框架的全部組件,例如數據庫、隊列、驗證、以及路由組件。服務提供者啓動加載並設置框架提供的各類功能,是整個 Laravel 啓動加載過程當中最重要的面向。app

服務提供者是啓動 Laravel 應用程序的真正關鍵。應用程序的實例被建立、服務提供者被註冊、請求被移轉至已啓動的應用程序。真正掌握 Laravel 應用程序是如何建立並經過服務提供者啓動,將是頗有價值的。固然,應用程序默認的服務提供者存放在 app/Providers 此一目錄下。框架

源碼分析過程

上面部分是結合文檔的理論部分,可能會比較難理解,下面經過源碼的方式分析一下整個過程。由於在word文檔上整理的分析過程,並且顯示的效果會比較好,因此整個分析過程就用截圖的方式記錄。

以上包括Laravel 5.x 啓動過程以及 Http 請求處理過程的基本處理流程,你們能夠對照框架的源碼一步一步學習,但願可以幫助你們。

轉載請註明出處。
做者:wuxiwei
出處:http://www.cnblogs.com/wxw16/p/6218742.html

相關文章
相關標籤/搜索