请求周期
简介
在「现实世界」中,如果了解工具的工作原理,那么在使用工具时会更有信心。应用开发也不例外。当您了解开发工具的功能时,使用起来会更加舒适和自信。
本文档的目标是为您提供有关「Laravel 框架是如何工作的」的良好的、高层次的概览。随着更好地了解整个框架,一切都感觉不再那么「神奇」,您将更自信地构建应用。如果您没有立即理解所有内容,也不要灰心!尽量对发生的事情有一个基本的了解,随着浏览文档的其它章节,知识将不断增长。
生命周期概述
第一件事
public/index.php
是 Laravel 应用请求的入口文件。所有请求都通过 Web 服务器(Apache / Nginx)配置重定向到该文件。index.php
文件不包含太多的代码。反而,它是加载框架其它部分的起始点。
index.php
文件加载 Composer 生成的自动加载器,然后从 bootstrap/app.php
脚本中获取 Laravel 应用实例。Laravel 本身做的第一件事是创建一个应用/服务容器 实例。
HTTP/终端内核
接下来,将请求发送到 HTTP 内核或终端内核,具体取决于进入应用的请求类型。这两个内核是所有请求都要通过的中心位置。现在,让我们只关注 app/Http/Kernel.php
HTTP 内核。
HTTP 内核继承自 Illuminate\Foundation\Http\Kernel
类,它定义了一个在执行请求前运行的 bootstrappers
数组。数组中的引导程序会配置错误处理,配置日志记录,检测应用环境 和执行在实际处理请求前要完成的其它任务。
HTTP 内核还定义了所有请求被应用处理之前必须经过的 HTTP 中间件 列表。这些中间件会处理 HTTP Session 的读写,判断应用是否处于维护模式,验证 CSRF 令牌 等。
HTTP 内核的 handle
方法的参数非常简单:接收 Request
并返回 Response
。可以把内核看作一个代表整个应用的大黑盒子。给它 HTTP 请求,就会返回 HTTP 响应。
服务提供者
内核引导最重要的操作之一是为应用加载 服务提供者。应用的所有服务提供者都在配置文件 config/app.php
的 providers
数组中配置。所有提供者都会先调用 register
方法进行注册,注册完成后,再调用 boot
方法启动。
服务提供者负责引导框架的各种组件,例如数据库、队列、验证和路由组件。框架提供的每个功能都由它们来引导并配置,因此服务提供者是整个 Laravel 引导过程中最重要的方面。
分发请求
应用引导完成并注册了所有服务提供者后,Request
将被交给路由器进行分发。路由器将请求分发到路由或控制器,并运行路由指定的中间件。
聚焦服务提供者
服务提供者确实是引导 Laravel 应用的关键。创建应用实例,注册服务提供者,并将请求交给引导的应用。就这么简单!
牢牢掌握如何通过服务提供者来构建和引导 Laravel 应用是很有价值的。应用的默认服务提供者存放在 app/Providers
目录中。
默认情况下,AppServiceProvider
是空的。此服务提供者是添加应用自身引导和服务容器绑定的好地方。当然,对于大型应用而言,可以创建多个服务提供者,每个服务提供者进行更细致类型的引导。