本篇文章為大家帶來了關於laravel請求聲明週期的相關知識,請求生命週期有不同的術語,如自動載入器、核心、服務提供者、調度請求和路由等,希望對大家有幫助。
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影片教學】
以上是詳解及案例:Laravel請求的生命週期介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!