首頁 > php框架 > Laravel > 詳解及案例:Laravel請求的生命週期介紹

詳解及案例:Laravel請求的生命週期介紹

WBOY
發布: 2022-02-15 17:27:02
轉載
2442 人瀏覽過

本篇文章為大家帶來了關於laravel請求聲明週期的相關知識,請求生命週期有不同的術語,如自動載入器、核心、服務提供者、調度請求和路由等,希望對大家有幫助。

詳解及案例:Laravel請求的生命週期介紹

Laravel 是一個強大的PHP框架,當您學習laravel框架時,Laravel 請求生命週期是最好的起點。本文將介紹在Laravel中一個HTTP 請求從接收到回應之間發生了什麼事。對請求生命週期的深入研究將有助於我們理解 Laravel 結構。 (基於Laravel 8)

請求生命週期有不同的術語,如自動載入器、核心、服務提供器、調度請求和路由等。一旦您詳細了解了所有術語,您將對該框架有更多的理解,並且可以隨心所欲地擴展不同的功能。

Laravel 请求生命周期

Laravel 請求生命週期概述

第一步

載入專案依賴,建立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[&#39;APP_BASE_PATH&#39;] ?? 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 內核還是 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中文網其他相關文章!

相關標籤:
來源:csdn.net
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板