2023-08-27|閱讀時間 ‧ 約 5 分鐘

理解 Laravel 框架生命週期

學習框架前第一步,先理解框架的生命週期

學習完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 服務器將等待下一輪用戶請求。


分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.