Heim >PHP-Framework >Laravel >Ausführliche Erklärung und Fälle: Einführung in den Lebenszyklus von Laravel-Anfragen

Ausführliche Erklärung und Fälle: Einführung in den Lebenszyklus von Laravel-Anfragen

WBOY
WBOYnach vorne
2022-02-15 17:27:022441Durchsuche

Dieser Artikel vermittelt Ihnen relevantes Wissen über den Anforderungsdeklarationszyklus von laravel Der Anforderungslebenszyklus hat unterschiedliche Begriffe, wie z. B. Autoloader, Kernel, Dienstanbieter, Planungsanforderung und Routing usw. Ich hoffe, dass er für alle hilfreich ist. .

Ausführliche Erklärung und Fälle: Einführung in den Lebenszyklus von Laravel-Anfragen

Laravel ist ein leistungsstarkes PHP-Framework. Wenn Sie das Laravel-Framework erlernen, ist der Laravel-Anfragelebenszyklus der beste Ausgangspunkt. In diesem Artikel wird erläutert, was zwischen dem Empfang einer HTTP-Anfrage und der Antwort in Laravel passiert. Eine eingehende Untersuchung des Anforderungslebenszyklus wird uns helfen, die Struktur von Laravel zu verstehen. (Basierend auf Laravel 8)

Der Anforderungslebenszyklus hat unterschiedliche Begriffe wie Autoloader, Kernel, Dienstanbieter, Versandanforderung und Routing usw. Sobald Sie die gesamte Terminologie im Detail verstanden haben, haben Sie ein besseres Verständnis für das Framework und können es nach Ihren Wünschen um verschiedene Funktionen erweitern.

Laravel 请求生命周期

Übersicht über den Lebenszyklus von Laravel-Anfragen

Der erste Schritt

Projektabhängigkeiten laden und eine Laravel-Anwendungsinstanz erstellen

Der Einstiegspunkt für alle Anfragen in der Laravel-Anwendung ist public/index.php Dokument. Alle Anfragen werden von der Konfiguration Ihres Webservers (Apache/Nginx) an diese Datei weitergeleitet. Diese index.php-Datei enthält nicht viel Code. Stattdessen ist es der Ausgangspunkt für das Laden des restlichen Frames. 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 内核扩展了 IlluminateFoundationHttpkernel 类,该类定义了一个将在执行请求之前运行的 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/Providersrrreee

Die Datei index.php lädt die von Composer generierte Autoloader-Definition und ruft dann die Instanz der Laravel-Anwendung von bootstrap/app.php ab.

bootstrap/app.php:🎜rrreee🎜Danach wird das Laravel-Framework gebootet, um eine Anwendungsinstanz zu verwenden und zu generieren. 🎜🎜public/index.php: 🎜rrreee🎜Sobald die Anwendungsinstanz erstellt wurde, werden eingehende Anfragen vom Kernel verarbeitet. 🎜🎜HTTP oder Konsolenkernel🎜🎜Als nächstes wird die eingehende Anfrage entweder an den HTTP-Kernel oder den Konsolenkern gesendet, abhängig von der Art der Anfrage, die in die Anwendung eingeht. Diese beiden Kerne fungieren als zentraler Ort, über den alle Anfragen fließen. Konzentrieren wir uns zunächst nur auf den HTTP-Kernel, der sich in app/Http/Kernel.php befindet. 🎜🎜Der HTTP-Kernel erweitert die Klasse IlluminateFoundationHttpkernel, die ein Array von Bootstrappern definiert, die vor der Ausführung der Anfrage ausgeführt werden. Diese Bootstraps werden verwendet, um die Ausnahmebehandlung zu konfigurieren, die Protokollierung zu konfigurieren, die Anwendungsumgebung zu erkennen und andere Aufgaben auszuführen, die abgeschlossen werden müssen, bevor die Anforderung tatsächlich verarbeitet wird. Normalerweise müssen Sie sich über diese Konfigurationen keine Gedanken machen. 🎜🎜Der HTTP-Kern definiert außerdem eine Liste von HTTP-Middlewares, die alle Anforderungen durchlaufen müssen, bevor sie von der Anwendung verarbeitet werden. Diese Middlewares übernehmen das Lesen und Schreiben von HTTP-Sitzungen, die Feststellung, ob sich die Anwendung im Wartungsmodus befindet, die Validierung von CSRF-Tokens und mehr. Wir werden dies im Folgenden ausführlich besprechen. 🎜🎜Die Signatur der Handle-Methode des HTTP-Kernels ist sehr einfach: Sie empfängt die Request-Schnittstelle und gibt die Response-Schnittstelle zurück. Stellen Sie sich den Kernel als eine große Blackbox vor, die die gesamte Anwendung darstellt. Geben Sie eine HTTP-Anfrage und es wird eine HTTP-Antwort zurückgegeben. 🎜🎜Der HTTP-Kernel lädt auch Dienstanbieter, indem er Middleware und andere Funktionen konfiguriert. 🎜🎜Dienstanbieter🎜🎜Einer der wichtigsten Kernel-Boot-Vorgänge ist das Laden von Dienstanbietern für die Anwendung. Alle Dienstanbieter für die Anwendung befinden sich im Array providers in config/app.php. 🎜🎜Laravel wird diese Liste von Anbietern durchlaufen und jeden einzelnen von ihnen instanziieren. Nachdem ein Anbieter instanziiert wurde, wird die Methode register für alle Anbieter aufgerufen. Sobald alle Anbieter registriert sind, wird die Methode boot für jeden Anbieter aufgerufen. 🎜🎜Dienstanbieter sind für das Bootstrapping aller verschiedenen Komponenten des Frameworks wie Datenbank-, Warteschlangen-, Validierungs- und Routing-Komponenten verantwortlich. Grundsätzlich wird jede wichtige von Laravel bereitgestellte Funktion von einem Dienstanbieter gebootet und konfiguriert. Dienstanbieter sind aufgrund der vielen Funktionen, die ihr Bootstrapping- und Konfigurations-Framework bietet, der wichtigste Teil des gesamten Laravel-Bootstrapping-Prozesses. 🎜🎜Sie fragen sich vielleicht, warum bei jedem Dienstanbieter die Register-Methode jedes Dienstanbieters aufgerufen wird, bevor die boot-Methode aufgerufen wird. Die Antwort ist einfach. Durch den ersten Aufruf der Registermethode jedes Dienstanbieters kann sich der Dienstanbieter darauf verlassen, dass jede Containerbindung registriert und verfügbar ist, wenn die Boot-Methode ausgeführt wird. 🎜🎜Dienstleister sind der Schlüssel zum Bootstrapping Ihrer Laravel-Anwendung. Die Anwendungsinstanz wird erstellt, der Dienstanbieter wird registriert und die Anfrage wird an die Bootstrapping-Anwendung übergeben. Es ist wirklich so einfach! 🎜🎜Es ist äußerst wertvoll, genau zu wissen, wie Laravel-Anwendungen erstellt und durch Dienstanbieter gebootet werden. Die Standarddienstanbieter Ihrer Anwendung werden im Verzeichnis app/Providers gespeichert. 🎜🎜Standardmäßig ist AppServiceProvider leer. Dieses Verfahren eignet sich gut zum Hinzufügen der eigenen Bootstrap- und Service-Container-Bindungen Ihrer Anwendung. Für große Anwendungen möchten Sie möglicherweise mehrere Dienstanbieter erstellen, die jeweils detailliertere Anleitungen für die spezifischen Dienste bereitstellen, die Ihre Anwendung verwendet. 🎜

Sobald die Anwendung gebootet ist und alle Dienstanbieter registriert und gebootet sind, werden die Anfragen zur Weiterleitung an den Router übergeben.

Routing

Einer der wichtigsten Dienstanbieter in einer Anwendung ist AppProvidersRouteServiceProvider. Dieser Dienstanbieter lädt Routendateien, die im Verzeichnis routes der Anwendung enthalten sind. AppProvidersRouteServiceProvider。此服务提供程序加载应用程序的 routes 目录中包含的路由文件。

路由器将请求发送到路由或控制器,并运行任何路由特定的中间件。

中间件为过滤或检查进入应用程序的 HTTP 请求提供了一种方便的机制。例如,Laravel 包含一个这样的中间件,用于验证应用程序的用户是否经过身份验证。如果用户未通过身份验证,中间件将用户重定向到登录页。但是,如果用户经过身份验证,中间件将允许请求进一步进入应用程序。一些中间件被分配给应用程序中的所有路由,比如那些在 HTTP 内核的 $middleware属性中定义的路由,而一些只被分配给特定的路由或路由组。您可以通过阅读完整的 中间件 文档来了解更多关于中间件的信息。

如果请求通过了所有匹配路由分配的中间件,则将 HTTP 请求定向到控制器或通过省略控制器直接返回视图或响应

控制器

控制器 app/Http/Controllers/ 执行特定操作并将数据发送到视图。

视图

视图 resources/views/ 适当地格式化数据,提供 HTTP 响应。

最后

一旦路由或控制器方法返回一个响应,该响应将通过路由的中间件返回,从而使应用程序有机会修改或检查传出的响应。

通常,不会只从路由操作中返回简单的字符串或数组。而是返回完整的 IlluminateHttpResponse 实例或视图。

Response 实例派生自 SymfonyComponentHttpFoundationResponse 类,它提供了许多构造 HTTP 响应的方法。

最后,一旦响应通过中间件传回,HTTP 内核的 handle 方法将返回响应对象,并且index.php

Der Router sendet die Anfrage an eine Route oder einen Controller und führt etwaige routenspezifische Middleware aus.

Middleware bietet einen praktischen Mechanismus zum Filtern oder Überprüfen von HTTP-Anfragen, die in Ihre Anwendung eingehen. Laravel enthält beispielsweise eine Middleware, die überprüft, ob Benutzer Ihrer Anwendung authentifiziert sind. Wenn der Benutzer nicht authentifiziert ist, leitet die Middleware den Benutzer zur Anmeldeseite weiter. Wenn der Benutzer jedoch authentifiziert ist, lässt die Middleware die Anfrage weiter in die Anwendung zu. Einige Middlewares werden allen Routen in der Anwendung zugewiesen, wie etwa diejenigen, die im Attribut $middleware des HTTP-Kernels definiert sind, während andere nur bestimmten Routen oder Routengruppen zugewiesen werden. Sie können mehr über Middleware erfahren, indem Sie die vollständige Middleware-Dokumentation lesen.

Leiten Sie die HTTP-Anfrage an den Controller oder geben Sie die Ansicht oder Antwort direkt zurück, indem Sie den Controller weglassen, wenn die Anfrage alle durch die entsprechende Route zugewiesenen Middlewares passiert

Controller 🎜🎜Controller app/Http/Controllers/ Führt einen bestimmten Vorgang aus und sendet Daten an die Ansicht. 🎜🎜Ansichten🎜🎜Ansichten <code>resources/views/ Daten entsprechend formatieren und HTTP-Antworten bereitstellen. 🎜🎜Endlich🎜🎜Sobald eine Route oder Controller-Methode eine Antwort zurückgibt, wird diese Antwort über die Middleware der Route zurückgegeben, sodass die Anwendung die Möglichkeit hat, die ausgehende Antwort zu ändern oder zu überprüfen. 🎜🎜Normalerweise geben Sie von einer Routing-Operation nicht nur eine einfache Zeichenfolge oder ein Array zurück. Stattdessen wird eine vollständige IlluminateHttpResponse-Instanz oder -Ansicht zurückgegeben. 🎜🎜Response-Instanzen werden von der Klasse SymfonyComponentHttpFoundationResponse abgeleitet, die viele Methoden zum Erstellen von HTTP-Antworten bereitstellt. 🎜🎜Sobald die Antwort schließlich über die Middleware zurückgeleitet wird, gibt die Handle-Methode des HTTP-Kernels das Antwortobjekt zurück und die Datei index.php ruft die Sendemethode für die zurückgegebene Antwort auf. Die Sendemethode sendet den Antwortinhalt an den Webbrowser des Benutzers. 🎜🎜Zu diesem Zeitpunkt haben wir alle Schritte des gesamten Laravel-Anfragelebenszyklus abgeschlossen! 🎜🎜【Verwandte Empfehlung: 🎜Laravel-Video-Tutorial🎜】🎜

Das obige ist der detaillierte Inhalt vonAusführliche Erklärung und Fälle: Einführung in den Lebenszyklus von Laravel-Anfragen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen