请求生命周期


介绍

在现实世界中使用任何工具时,如果了解该工具的工作原理,就会更加自信。应用程序开发也不例外。当您了解开发工具的运作方式时,使用它们会更加舒适和自信。

本文档的目标是为您提供 Laravel 框架工作的良好高级概述。通过更好地了解整个框架,一切都不再那么“神奇”,您将更有信心构建应用程序。如果您不立即理解所有术语,请不要气馁!尽量对正在发生的事情有一个基本的了解,当您探索文档的其他部分时,您的知识将会增长。

生命周期概述

第一步

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

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

HTTP / Console Kernels

接下来,入站请求将根据进入应用程序的请求类型发送到 HTTP 内核或控制台内核。这两个内核作为所有请求流经的中心位置。现在,让我们专注于 HTTP 内核,它位于 app/Http/Kernel.php

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

HTTP 内核还定义了所有请求在被应用程序处理之前必须通过的 HTTP 中间件列表。这些中间件处理读取和写入 HTTP 会话、确定应用程序是否处于维护模式、验证 CSRF 令牌等任务。我们很快会更多地讨论这些。

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

服务提供者

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

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

实际上,Laravel 提供的每个主要功能都是通过服务提供者进行引导和配置的。由于它们引导和配置框架提供的许多功能,因此服务提供者是整个 Laravel 引导过程中最重要的方面。

路由

您的应用程序中最重要的服务提供者之一是 App\Providers\RouteServiceProvider。此服务提供者加载包含在应用程序的 routes 目录中的路由文件。现在,打开 RouteServiceProvider 代码并查看它的工作方式!

一旦应用程序已经启动并且所有服务提供者已经注册,请求将被传递到路由器以进行分发。路由器将将请求分派到路由或控制器,并运行任何路由特定的中间件。

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

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

结束语

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

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

重点关注服务提供者

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

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

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


点赞 取消点赞 收藏 取消收藏

<< 上一篇: 部署

>> 下一篇: 服务容器