Laravel 請求生命週期--簡化版

dongyuhappy發表於2017-03-09

核心概念

  • 單一入口
  • Application
  • Kernel
  • Request
  • Response

單一入口

先來看laravel程式的nginx配置檔案,nginx首先判斷請求的檔案是否存在,如果不存在就交給index.php去處理。
index.php就是laravel程式的唯一入口。

 root ${laravel_path}/public; # laravel根目錄設定  
 location / {
    index index.php;
    try_files $uri $uri/ /index.php?$query_string;
 }

Application

Application是一個伺服器容器物件,它負責管理類依賴關係並執行依賴注入(DI)。

由此可見,它有兩個主要的功能:1. 建立類,2. 構造建立類需要的引數。

Application就如同一個工廠的車間,你只需要把原材料放進去,它會自動生成出成品。

基本使用方法


class Car{
    function __toString()
    {
        return 'Car'.mt_rand(1,100);
    }
}

$app = new \Illuminate\Foundation\Application();//容器
$app->bind('car',Car::class);// 加入原材料(規則)

foreach (range(1, 10) as $k) {
    echo $app->make('car') . "\r\n";//生產成品
}

Kernel

接收請求到響應請求的整個過程都是由Kernel負責。

Request

所有的請求相關的資訊都包含在Request物件裡面。換句話說要獲取請求的任何資訊都應該從這個物件裡面獲取。

Response

所有的返回給客戶端的資料都被包裝成為了一個Response物件。

生命週期

  • nginx把http請求轉發給public/index.php
  • 建立Application物件
  • Application裡面註冊App\Http\Kernel::class物件(Kernel)
  • 使用Application建立Kernel物件
  • 建立Request物件
  • 呼叫Kernelhandle方法處理Request請求,並返回Response物件
  • 使用Responsesend 方法輸出結果
  • 呼叫 Kernelterminate方法做相關清理的操作
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章