请求周期

未匹配的标注
本文档最新版为 11.x,旧版本可能放弃维护,推荐阅读最新版!

请求周期

引言

在 “现实世界” 中使用任何工具时,如果你了解该工具的工作原理,你会更有信心。应用开发也不例外。 当你了解你的开发工具如何工作时,你会更加舒适和自信地使用它们。

本文档的目的是为你提供一个关于 Laravel 框架如何工作的良好、高层次的概述。通过更好地了解整个框架,你会觉得一切都不再那么 “神奇”,并且在构建你的应用程序时会更加自信。如果你不是立即理解所有的术语,也不要灰心!只要尝试对正在发生的事情有一个基本的了解,随着你探索文档的其他部分,你的知识会不断增长。

生命周期概述

首先

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

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

HTTP / Console 内核

接下来,传入的请求会根据进入应用的请求类型,通过应用实例的 handleRequesthandleCommand 方法,被发送到 HTTP 内核或者 Console 内核。这两个内核是所有请求流经的中心位置。现在,让我们专注于 HTTP 内核,它是 Illuminate\Foundation\Http\Kernel 的一个实例。

HTTP 内核定义了一个将在执行请求之前运行的 bootstrappers 数组。 这些引导程序用来配置异常处理、配置日志、 检测应用程序环境 ,以及执行其他在实际处理请求前需要完成的任务。通常情况下,这些类处理的是 Laravel 内部配置,你无需担心。

HTTP 内核还定义了一个 HTTP 中间件列表,所有请求在被应用程序处理之前都必须通过该列表。这些中间件处理读写 HTTP session ,确定应用程序是否处于维护模式, 校验 CSRF 令牌 ,等等。我们接下来会做详细的讨论。

HTTP 内核的 handle 方法的签名非常简单:它接收 Request 接口并返回 Response 接口。把内核想象成一个代表整个应用程序的大黑匣子。向它提供 HTTP 请求,它将返回 HTTP 响应。

服务提供者

最重要的内核引导操作之一是为应用程序加载 服务提供者 。 服务提供者负责引导框架的所有不同组件,例如数据库、队列、验证和路由组件。

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

Laravel 提供的每个主要功能本质上都是由服务提供者引导和配置。因为它们引导和配置了框架提供的如此多的功能,所以服务提供者是整个 Laravel 引导过程中最重要的方面。

虽然框架内部使用了数十个服务提供者,但你也可以选择创建自己的服务提供者。 你可以在 bootstrap/providers.php 文件中找到你的应用程序正在使用的用户定义或第三方服务提供者列表。

路由

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

中间件为过滤或检查进入应用程序的 HTTP 请求提供了一种便捷的机制。例如,Laravel 包含一个验证应用程序用户是否已认证的中间件。如果用户未认证,中间件将把用户重定向到登录界面。但是,如果用户经过身份验证,中间件将允许请求进一步进入应用程序。 一些中间件被分配给应用程序中的所有路由,如 PreventRequestsDuringMaintenance,而一些中间件只被分配给特定路由或路由组。你可以通过阅读完整的中间件文档来了解更多关于中间件的信息。

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

收尾

一旦路由或控制器方法返回一个响应,该响应将通过路由的中间件返回,从而使应用程序有机会修改或检查传出的响应。
最后,一旦响应通过中间件返回,HTTP 内核的handle方法将响应对象返回给应用程序实例的 handleRequest,该方法在返回的响应上调用send方法。send方法返回响应内容给用户的web浏览器。至此,我们已经完成了整个Laravel请求生命周期的旅程!

关注服务提供者

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

牢牢掌握服务提供者的构建和其对 Laravel 应用处理机制的原理是非常有价值的。 应用程序的自定义服务提供者会存放在app/Providers目录下面。

AppServiceProvider默认是空白的。 这里是用于你添加应用自身的引导处理和服务容器绑定的一个非常棒的地方。在大型项目中,你可能希望创建多个服务提供者,每个服务提供者都为应用程序使用的特定服务提供更细粒度的引导。

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://learnku.com/docs/laravel/12.x/li...

译文地址:https://learnku.com/docs/laravel/12.x/li...

上一篇 下一篇
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
贡献者:2
讨论数量: 0
发起讨论 只看当前版本


暂无话题~