请求生命周期

Introduction

在“现实世界”中使用任何工具时,如果您了解该工具的工作原理,您会感到更加自信。应用程序开发也不例外。当您了解您的开发工具的功能时,您会更加自如和自信地使用它们。

本文档的目的是让您对 Laravel 框架的工作原理有一个很好的、高层次的概述。通过更好地了解整个框架,一切都会感觉不那么“神奇”,你会更有信心构建你的应用程序。如果您不能立即理解所有条款,请不要灰心!只需尝试对正在发生的事情有一个基本的了解,您的知识就会随着您探索文档的其他部分而增长。

生命周期概览

第一步

Laravel 应用程序的所有请求的入口点是public/index.php 文件。您的 Web 服务器 (Apache / Nginx) 配置将所有请求定向到此文件。这index.php 文件不包含太多代码。相反,它是加载框架其余部分的起点。

index.php 文件加载 Composer 生成的自动加载器定义,然后从中检索 Laravel 应用程序的实例bootstrap/app.php. Laravel 本身采取的第一个动作是创建应用程序的实例 /服务容器.

HTTP/控制台内核

接下来,传入请求被发送到 HTTP 内核或控制台内核,具体取决于进入应用程序的请求类型。这两个内核充当所有请求流经的中心位置。现在,让我们只关注 HTTP 内核,它位于app/Http/Kernel.php.

HTTP 内核扩展了Illuminate\Foundation\Http\Kernel 类,它定义了一个数组bootstrappers 将在执行请求之前运行。这些引导程序配置错误处理、配置日志记录、检测应用环境,并执行在实际处理请求之前需要完成的其他任务。通常,这些类会处理您无需担心的 Laravel 内部配置。

HTTP 内核还定义了一个 HTTP 列表middleware 所有请求都必须在应用程序处理之前通过。这些中间件处理读写HTTP会话,确定应用程序是否处于维护模式,验证 CSRF 令牌, 和更多。我们很快就会详细讨论这些。

HTTP 内核的方法签名handle 方法很简单:它接收一个Request 并返回一个Response.将内核视为代表整个应用程序的大黑盒子。向它提供 HTTP 请求,它将返回 HTTP 响应。

服务供应商

最重要的内核引导操作之一是加载服务供应商 为您的应用程序。服务提供商负责引导所有框架的各种组件,例如数据库、队列、验证和路由组件。该应用程序的所有服务提供者都在config/app.php 配置文件的providers 大批。

Laravel 将遍历这个提供者列表并实例化每个提供者。在实例化提供者之后,register 方法将在所有提供者上调用。然后,一旦所有提供者都已注册,boot 方法将在每个提供者上调用。这样一来,服务提供商可能会依赖于每个容器绑定在他们的时间之前已注册并可用boot 方法被执行。

基本上 Laravel 提供的每一个主要功能都是由服务提供商引导和配置的。由于它们引导和配置框架提供的众多功能,因此服务提供者是整个 Laravel 引导过程中最重要的方面。

Routing

您的应用程序中最重要的服务提供商之一是App\Providers\RouteServiceProvider.该服务提供商加载包含在您的应用程序中的路由文件routes目录。来吧,破解打开RouteServiceProvider 代码并看看它是如何工作的!

一旦应用程序被引导并且所有服务提供者都被注册,Request 将交给路由器进行调度。路由器会将请求分派给路由或控制器,并运行任何特定于路由的中间件。

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

如果请求通过所有匹配的路由分配的中间件,路由或控制器方法将被执行,路由或控制器方法返回的响应将通过路由的中间件链发回。

整理起来

一旦路由或控制器方法返回响应,响应将通过路由的中间件向外传播,让应用程序有机会修改或检查传出响应。

最后,一旦响应通过中间件传回,HTTP 内核的handle 方法返回响应对象和index.php 文件调用send 返回响应的方法。这send 方法将响应内容发送到用户的 Web 浏览器。我们已经完成了整个 Laravel 请求生命周期的旅程!

关注服务提供商

服务提供者确实是引导 Laravel 应用程序的关键。创建应用程序实例,注册服务提供者,并将请求传递给引导的应用程序。真的就这么简单!

牢牢掌握 Laravel 应用程序是如何通过服务提供商构建和引导的是非常有价值的。您的应用程序的默认服务提供商存储在app/Providers 目录。

默认情况下,AppServiceProvider 是相当空的。该提供程序是添加应用程序自己的引导程序和服务容器绑定的好地方。对于大型应用程序,您可能希望创建多个服务提供者,每个服务提供者都为您的应用程序使用的特定服务提供更细粒度的引导。

豫ICP备18041297号-2