學習框架前第一步,先理解框架的生命週期
學習完PHP程式基礎後,就會開始進入框架的學習,為了能理解Laravel框架是如何運作的,就必須清楚框架的生命週期,這也是面試時的必考題哦。
根據官方文件的說明,Laravel 應用程序的所有請求的入口點都是public/index.php
文件。所有請求都由你的 web 服務器(Apache/Nginx)配置定向到此文件。那個 index.php 文件不包含太多代碼。相反,它是加載框架其餘部分的起點。
該 index.php 文件將加載 Composer 生成的自動加載器定義,然後從 bootstrap/app.php 中檢索 Laravel 應用程序的實例。 Laravel 本身採取的第一個操作是創建應用 / 服務容器 的實例。
<?php
use Illuminate\Contracts\Http\Kernel;
use Illuminate\Http\Request;
define('LARAVEL_START', microtime(true));
if (file_exists($maintenance = __DIR__.'/../storage/framework/maintenance.php')) {
require $maintenance;
}
require __DIR__.'/../vendor/autoload.php';
$app = require_once __DIR__.'/../bootstrap/app.php';
$kernel = $app->make(Kernel::class);
$response = $kernel->handle(
$request = Request::capture()
)->send();
$kernel->terminate($request, $response);
接著我們來看程式碼
define('LARAVEL_START', microtime(true));
是定義了一個名為 LARAVEL_START
的常數,它儲存了目前的時間,以微秒為單位,用於計算程式碼執行時間。
if (file_exists($maintenance = __DIR__.'/../storage/framework/maintenance.php')) { require $maintenance; }
,在於檢查是否存在一個叫做 maintenance.php
的檔案。如果這個檔案存在,它會被引入,並且這個應用程式將被設定為「維護模式」,這樣的話,應用程式將返回維護模式的相關回應。
require __DIR__.'/../vendor/autoload.php';
這段主要引入 Composer 產生的自動載入檔案,這樣可以自動載入應用程式所需的所有類別和依賴。
$app = require_once __DIR__.'/../bootstrap/app.php';
為引入應用程式的主要啟動檔案 app.php
,這個檔案初始化並設定 Laravel 應用程式實例。
再來利用$app->make(Kernel::class);
實例化kernel物件並賦予到$kernel這個變數,並從應用程式實例中取得一個核心 Kernel
的實例,用於處理 HTTP 請求和回應。
$response = $kernel->handle($request = Request::capture())->send();
而這一行是整個請求到回應處理的核心。首先,Request::capture()
創建了一個捕獲到的 HTTP 請求實例。接著,這個請求被傳遞給核心 Kernel
進行處理。handle
方法會處理請求,執行相關的中介層、路由和控制器,然後生成回應。最後,send
方法將回應送回給用戶端。
$kernel->terminate($request, $response);
這段在整個請求到回應循環完成後,這一行用於終止核心 Kernel
的執行。這可能包括清理資源、關閉資料庫連接等。
總結:index.php 整段程式碼負責初始化 Laravel 應用程式,處理傳入的 HTTP 請求,執行相應的控制器和中介層,然後生成並傳送回應,最後在處理完成後進行清理工作,之後我們的 Web 服務器將等待下一輪用戶請求。