1. 程式人生 > >Laravel框架原始碼解析

Laravel框架原始碼解析

一、請求-響應篇


1.程式啟動準備

1.1 服務容器例項化

index.php入口檔案包含了$app = require_once __DIR__.'/../bootstrap/app.php';這一行程式碼,app.php會返回框架的建立的服務容器。這個過程會完成以下幾個步驟:

  • 服務容器例項化
  • 註冊服務容器本身
  • 註冊基礎服務提供者
  • 基礎路徑註冊
  • 核心類別名註冊

相關原始碼在Illuminate\Foundation目錄下的Application.php檔案中。(注:使用的laravel版本:5.1;文中的Illuminate位於 根目錄\vendor\laravel\framework\src\ 目錄下,為了行文方便,故省略。)

1.2 核心類(Kernel)例項化

在容器例項化之後,便可以通過服務容器自動例項化物件,例項化程式碼在index.php 中的 $kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);

2.請求例項化

完成了第一步的準備工作之後,需要進行請求的例項化,請求例項的建立是通過Illuminate\Http\Request類的capture方法完成的。

3.處理請求

完成請求例項化之後,將進入對請求例項的處理階段,即$response = $kernel->handle(); 通過不同的處理方式可以返回不同的響應結果,從而實現不同的功能。具體請求的處理是通過Kernel.php中的sendRequestThroughRouter方法實現的。

3.1請求處理準備工作

這個準備過程大致包含:環境監測、配置載入、日誌配置、異常處理、外觀註冊、服務提供者註冊、啟動服務 這7大步驟。在Illuminate\Foundation\Http\Kernel.php 中的$bootstrappers屬性進行配置。對應類檔案在Illuminate\Foundation\Bootstrap目錄下。

3.2中介軟體

在請求處理中,經過煩瑣的準備工作,應用程式開始對請求進行處理,Laravel對請求的處理是逐級進行的,首先經過中介軟體處理,然後通過路由,最後控制器生成響應。

3.3路由處理生成響應

  • 路由匹配
  • 控制器生成
  • 響應生成

4. 響應的傳送與程式終止

4.1響應的傳送

整個請求-響應過程最後的部分就是將封裝在Illuminate\Http\Response例項中的響應以Http響應的形式傳送給客戶端,實現一個請求生命週期最後的環節。響應的傳送是通過index.php中的$response->send();實現的。

4.2程式終止

完成Http的響應後,進入程式生命週期的最後階段——程式終止,在Laravel框架中,程式終止主要是完成終止中介軟體的呼叫。通過index.php中的terminate()方法實現。

二、資料庫連線與管理篇

1.資料庫管理階段

首先介紹查詢構造器實現過程中的資料庫管理階段。查詢構造器建立的過程可分為2個階段:資料庫連線封裝階段、查詢構造器生成階段。其中第一階段又可分為以下四個過程:

  • 資料庫管理階段
  • 資料庫連線工廠階段
  • 資料庫聯結器階段
  • 資料庫連線建立階段