Laravel 是一個強大的PHP框架,當您學習laravel框架時,Laravel 請求生命週期是最好的起點。本文將介紹在Laravel中一個HTTP 請求從接收到響應之間發生了什麼。對請求生命週期的深入研究將有助於我們理解 Laravel 結構。(基於Laravel 8)
請求生命週期有不同的術語,如自動載入器、核心、服務提供器、排程請求和路由等。一旦您詳細瞭解了所有術語,您將對該框架有更多的理解,並且可以隨心所欲地擴充套件不同的功能。
載入專案依賴,建立 Laravel 應用範例
Laravel 應用程式的所有請求的入口點都是 public/index.php
檔案。所有請求都由你的 web 伺服器(Apache/Nginx)設定定向到此檔案。那個 index.php 檔案不包含太多程式碼。相反,它是載入框架其餘部分的起點。
# 1、載入專案依賴require __DIR__.'/../vendor/autoload.php'; $app = require_once __DIR__.'/../bootstrap/app.php';
該 index.php
檔案將載入 Composer 生成的自動載入器定義,然後從 bootstrap/app.php
中檢索 Laravel 應用程式的範例。
bootstrap/app.php:
<?php # 2、建立應用範例 $app = new Illuminate\Foundation\Application( $_ENV['APP_BASE_PATH'] ?? dirname(__DIR__) ); # 3、完成核心繫結 $app->singleton( Illuminate\Contracts\Http\Kernel::class, App\Http\Kernel::class ); $app->singleton( Illuminate\Contracts\Console\Kernel::class, App\Console\Kernel::class ); $app->singleton( Illuminate\Contracts\Debug\ExceptionHandler::class, App\Exceptions\Handler::class ); return $app;
之後,它將引導 Laravel 框架使用並生成應用程式範例。
public/index.php:
# 4、接收請求並響應$kernel = $app->make(Kernel::class);// 處理請求$response = tap($kernel->handle( // 建立請求範例 $request = Request::capture()// 傳送響應))->send();$kernel->terminate($request, $response);
一旦應用程式範例生成,傳入請求將由核心處理。
接下來,傳入請求被傳送到 HTTP 核心還是 Console 核心,具體取決於進入應用的請求型別。這兩個核心充當所有請求流經的中心位置。現在,讓我們只關注 HTTP 核心,它位於 app/Http/Kernel.php
中。
HTTP 核心擴充套件了 Illuminate\Foundation\Http\kernel
類,該類定義了一個將在執行請求之前執行的 bootstrappers 陣列。這些載入程式用來設定例外處理、設定紀錄檔、檢測應用程式環境 ,並執行在實際處理請求之前需要完成的其他任務。通常情況下,你不需要在意這些設定。
HTTP 核心還定義了一個 HTTP 中介軟體列表,所有請求在被應用程式處理之前必須通過這些中介軟體。這些中介軟體處理 HTTP 對談的讀寫、確定應用程式是否處於維護模式、驗證 CSRF 令牌等。我們接下來會做詳細的討論。
HTTP 核心的 handle 方法的簽名非常簡單:它接收 Request 介面並返回 Response 介面。把核心想象成一個代表整個應用程式的大黑匣子。向它提供 HTTP 請求,它將返回 HTTP 響應。
通過設定中介軟體和其他功能,HTTP 核心還載入服務提供者。
最重要的核心引導操作之一是為應用程式載入 service providers
。應用程式的所有服務提供程式都在 config/app.php
中的 providers
陣列。
Laravel 將遍歷這個提供者列表並範例化它們中的每一個。範例化提供程式後,將對所有提供程式呼叫 register
方法。然後,一旦註冊了所有提供程式,就會對每個提供程式呼叫boot
方法。
服務提供者負責引導框架的所有不同元件,如資料庫、佇列、驗證和路由元件。基本上,Laravel 提供的每個主要功能都是由服務提供商引導和設定的。由於它們引導和設定框架提供的許多特性,服務提供者是整個 Laravel 引導過程中最重要的部分。
您可能想知道,為什麼在對任何服務提供者呼叫 boot
方法之前都要呼叫每個服務提供者的 register 方法。答案很簡單。通過首先呼叫每個服務提供程式的 register 方法,服務提供者可能依賴於在執行 boot 方法時註冊並可用的每個容器繫結。
服務提供者是引導 Laravel 應用程式的關鍵。應用程式範例被建立,服務提供者被註冊,請求被交給引導的應用程式。真的就是這麼簡單!
牢牢掌握 Laravel 應用程式如何通過服務提供商構建和引導是非常有價值的。您的應用程式的預設服務提供者儲存在該app/Providers
目錄中。
預設情況下,AppServiceProvider是空的。此程式是新增應用程式自己的引導和服務容器繫結的好地方。對於大型應用程式,您可能希望建立多個服務提供者,每個服務提供者為您的應用程式使用的特定服務提供更精細的引導。
一旦應用程式被引導並且所有服務提供者都被註冊和引導,請求將被移交給路由器進行排程。
應用程式中最重要的服務提供者之一是 App\Providers\RouteServiceProvider
。此服務提供程式載入應用程式的 routes
目錄中包含的路由檔案。
路由器將請求傳送到路由或控制器,並執行任何路由特定的中介軟體。
中介軟體為過濾或檢查進入應用程式的 HTTP 請求提供了一種方便的機制。例如,Laravel 包含一個這樣的中介軟體,用於驗證應用程式的使用者是否經過身份驗證。如果使用者未通過身份驗證,中介軟體將使用者重定向到登入頁。但是,如果使用者經過身份驗證,中介軟體將允許請求進一步進入應用程式。一些中介軟體被分配給應用程式中的所有路由,比如那些在 HTTP 核心的 $middleware
屬性中定義的路由,而一些只被分配給特定的路由或路由組。您可以通過閱讀完整的 中介軟體 檔案來了解更多關於中介軟體的資訊。
如果請求通過了所有匹配路由分配的中介軟體,則將 HTTP 請求定向到控制器或通過省略控制器直接返回檢視或響應
控制器 app/Http/Controllers/
執行特定操作並將資料傳送到檢視。
檢視 resources/views/
適當地格式化資料,提供 HTTP 響應。
一旦路由或控制器方法返回一個響應,該響應將通過路由的中介軟體返回,從而使應用程式有機會修改或檢查傳出的響應。
通常,不會只從路由操作中返回簡單的字串或陣列。而是返回完整的 Illuminate\Http\Response
範例或檢視。
Response 範例派生自 Symfony\Component\Http\Foundation\Response
類,它提供了許多構造 HTTP 響應的方法。
最後,一旦響應通過中介軟體傳回,HTTP 核心的 handle 方法將返回響應物件,並且index.php
檔案對返回的響應呼叫 send 方法。send 方法將響應內容傳送到使用者的 web 瀏覽器。
至此,我們已經完成了整個 Laravel 請求生命週期的所有步驟!
【相關推薦:】
以上就是詳解及案例:Laravel請求的生命週期介紹的詳細內容,更多請關注TW511.COM其它相關文章!