本文翻译自 Laravel 5.5 的官方文档,原始链接参看文末的「参考」部分。

引言

在「现实世界」中使用任何工具时,如果您了解该工具的工作原理,您会更有信心。 应用开发没有什么不同。 当您了解开发工具的运作方式时,您会更加舒适和自信。

本文档的目的是为您提供一个关于 Laravel 框架如何工作的高级概述。 通过更好地了解整体框架,一切都不那么「神奇」,您将更加自信地构建应用程序。 如果你不明白所有的术语,不要失去心! 只需尝试掌握正在发生的事情,随着您浏览文档的其他部分,您的知识将会增长。

生命周期概述

第一件事

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

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

HTTP / 控制台(Console)内核

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

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

HTTP 内核还定义了所有请求在应用程序处理之前必须通过的 HTTP 中间件的列表。 这些中间件处理读取和写入 HTTP 会话,确定应用程序是否处于维护模式,验证 CSRF 令牌等等。

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

服务提供者

最重要的内核引导操作之一是加载您的应用程序的服务提供者。 应用程序的所有服务提供者都配置在config/app.php配置文件的providers数组中。 首先,所有提供者都会调用register方法,一旦所有提供者都被注册,boot方法将被调用。

服务提供者负责引导所有框架的各种组件,例如数据库,队列,验证和路由组件。 由于它们引导并配置了框架提供的每个功能,服务提供者是整个 Laravel 引导过程中最重要的方面。

调度请求

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

专注于服务提供者

服务提供者真正是引导 Laravel 应用程序的关键。 创建应用程序实例,注册服务提供者,并将请求交给已引导完成的应用程序。 真的很简单!

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

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

参考

  1. Request Lifecycle
  2. Request Lifecycle in GitHub
  3. 中文文案排版指北