laravel的请求周期


刘欣翻译laravel的请求周期说明

翻译人:刘欣

介绍

我们使用任何工具,都应该尽可能了解该工具的工作原理,这样用起来才能更游刃有余和有更多发挥性,编程也不例外。

认真读完本文,会让您对 Laravel 框架的工作原理有一个更深入的理解。如果你不能马上完全理解本文也不用灰心!先试着掌握一些基本的东西,你的知识水平将会随着对文档的探索而不断提升。

翻译者刘欣在学习之初,很多也不理解。逐步学习,实践,甚至主动翻译,对比文档,才越来越清晰。任何东西要学习,得读三到五遍文档,不懂的多读几遍。

生命周期概述

入口

Laravel 应用程序的所有请求的入口都是public/index.php文件

所有请求最初都由你的 web 服务器(Apache/Nginx)配置定向到此文件。index.php 文件代码不多,但它是加载框架的起点。

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

HTTP 或 Console 内核

接下来,传入的请求会被发送到 HTTP 内核参考)或者Console 内核,具体取决于进入应用的请求类型(分别用于处理 Web 请求和 Artisan 命令)。

这两个内核充当所有请求都要经过的的中心位置。

我们主要来说 HTTP 内核,它位于 app/Http/Kernel.php 中。

HTTP 内核扩展了 Illuminate\Foundation\HTTP\kernel 类。

该类定义了一个将在执行请求之前运行的 bootstrappers 数组。这些引导程序用来配置异常处理、配置日志、检测应用程序环境 ,并执行在实际处理请求之前需要完成的其他任务。通常情况下,你不需要在意这些配置。

HTTP 内核还定义了一系列所有请求在处理前需要经过的 HTTP 中间件列表。这些中间件处理读写 HTTP 会话 ,确定应用程序是否处于维护模式,校验 CSRF 令牌 等等。

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

服务提供器

最重要的内核引导操作之一是为应用程序加载服务提供者(service providers)应用程序的所有服务提供程序都在 config/app.php 中的 providers 数组。

Laravel 将遍历这个提供者列表并实例化它们中的每一个。实例化提供程序后,将对所有提供程序调用 register 方法。然后,一旦注册了所有提供程序,就会对每个提供程序调用 boot 方法。

服务提供者负责引导启动框架的各种组件,如数据库、队列、验证和路由组件。基本上,Laravel 提供的每个主要功能都是由服务提供商引导和配置的。由于它们引导和配置框架提供的许多特性,服务提供者是整个 Laravel 引导过程中最重要的部分。

您可能想知道,为什么在对任何服务提供者调用 boot 方法之前都要调用每个服务提供者的 register 方法。答案很简单,通过首先调用每个服务提供程序的 register 方法,服务提供者可能依赖于在执行 boot 方法时注册并可用的每个容器绑定。

路由

应用程序中最重要的服务提供者之一是 App\providers\RouteServiceProvider

此服务提供程序加载应用程序的 routes 目录中包含的路由文件。(可以打开 RouteServiceProvider代码,看看它是如何工作的!

可以查看《Laravel路由》查看更详细的路由文档。

一旦应用程序被引导并且所有服务提供者都被注册,路由将会调度请求,路由器将会分发请求到路由或控制器,同时包括路由指定的中间件。

中间件为过滤或检查进入应用程序的 HTTP 请求提供了一种方便的机制。

例如:Laravel有一个用于验证用户是否经过身份验证的中间件。当用户未通过身份验证,中间件将用户重定向到登录页。如果用户经过身份验证,中间件将允许请求进一步进行。一些中间件被分配给应用程序中的所有路由,比如那些在 HTTP 内核的 $middleware 属性中定义的路由,而一些只被分配给特定的路由或路由组。

可以通过阅读laravel完整的文档了解更多关于中间件的信息。

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

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

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

以上流程可以通过下面这张图来描述:

laravel请求周期

聚焦服务提供器

服务提供器是引导 Laravel 应用程序的关键。创建应用程序实例-注册服务提供器-并将请求传递给引导应用程序,就是这样的步骤。

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

默认情况下,AppServiceProvider 是空白的。这里是添加自定义启动和服务容器绑定的最佳位置。当然,在大型项目中,您可能希望创建多个服务提供者,每个服务提供者都为应用程序使用的特定服务提供更细粒度的引导。

0

【laravel的请求周期隶属于分类: php laravel

它起初由本站用户:刘欣Eden于2年前 创建。

它被收录于如下合集: laravel8中文文档_刘欣翻译

该内容的链接是:

目录