您好,登錄后才能下訂單哦!
本篇內容主要講解“Laravel請求的生命周期案例分析”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“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請求的生命周期案例分析”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。