91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Laravel請求的生命周期案例分析

發布時間:2022-02-16 11:49:33 來源:億速云 閱讀:151 作者:iii 欄目:編程語言

本篇內容主要講解“Laravel請求的生命周期案例分析”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Laravel請求的生命周期案例分析”吧!

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

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

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['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 內核還是 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請求的生命周期案例分析”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

濉溪县| 板桥市| 道孚县| 三原县| 海宁市| 青田县| 伊金霍洛旗| 温州市| 无为县| 台前县| 公主岭市| 金门县| 大荔县| 石狮市| 龙陵县| 崇仁县| 搜索| 百色市| 原平市| 儋州市| 苏尼特左旗| 丰顺县| 长武县| 靖州| 台安县| 丰都县| 巴塘县| 获嘉县| 广安市| 榕江县| 区。| 丁青县| 敦煌市| 自贡市| 南平市| 邮箱| 夹江县| 永丰县| 元氏县| 浑源县| 泾川县|