<article><h1>Laravel 的请求生命周期</h1><ul><li><a href="#introduction">介绍</a></li><li><a href="#lifecycle-overview">请求生命周期概述</a></li><li><a href="#focus-on-service-providers">聚焦服务提供者</a></li></ul><p><a name="introduction"></a></p><h2><a href="#introduction">介绍</a></h2><p>使用「现实世界」中的任何工具时,如果理解这个工具的运作原理,那么你会更加得心应手的使用这个工具。应用开发也是这样。当你明白你的开发工具如何运行的,你就会对它们的使用游刃有余。</p><p>这篇文档的目的是让你更好的理解 Laravel 框架如何进行工作及它的工作原理。通过对框架进行全面的了解,一切都不会那么「神奇」,也将会让你更有自信的构建你的应用。如果你不能理解所有的这些术语,也不要丧失信心!只要对现在提到的东西有个基本概念,随着对本文档和其他章节的不断探索,你对它们的理解会不断提升。</p><p><a name="lifecycle-overview"></a></p><h2><a href="#lifecycle-overview">生命周期概述</a></h2><h3>第一件事</h3><p>一个 Laravel 应用的所有请求的入口都是 <code class=" language-php"><span class="token keyword">public</span><span class="token operator">/</span>index<span class="token punctuation">.</span>php</code> 文件。 通过网页服务器 (Apache / Nginx) 所有请求都会导向这个文件。 <code class=" language-php">index<span class="token punctuation">.</span>php</code> 文件没有太多的代码,只是加载框架其他部分的一个入口。</p><p><code class=" language-php">index<span class="token punctuation">.</span>php</code> 文件载入 Composer 生成的自动加载器定义,并从 <code class=" language-php">bootstrap<span class="token operator">/</span>app<span class="token punctuation">.</span>php</code> 文件获取到 Laravel 应用实例。Laravel 的第一个动作就是创建一个自身应用实例 / <a href="/docs/5.4/container">服务容器</a>。</p><h3>HTTP / Console 内核</h3><p>接下来,传入的请求会被发送给 HTTP 内核或者 console 内核,这根据进入应用的请求的类型而定。这两个内核服务是所有请求都经过的中枢。让我们现在只关注位于 <code class=" language-php">app<span class="token operator">/</span>Http<span class="token operator">/</span>Kernel<span class="token punctuation">.</span>php</code> 的 HTTP 内核。</p><p>HTTP 内核继承自 <code class=" language-php">Illuminate\<span class="token package">Foundation<span class="token punctuation">\</span>Http<span class="token punctuation">\</span>Kernel</span></code> 类,它定义了一个 <code class=" language-php">bootstrappers</code> 数组,数组中的类在请求真正执行前进行前置执行。 这些引导程序配置了错误处理,日志记录,<a href="/docs/5.4/configuration#environment-configuration">检测应用程序环境</a>,以及其他在请求被处理前需要完成的工作。</p><p>HTTP 内核同时定义了一个 HTTP <a href="/docs/5.4/middleware">中间件</a> 列表,所有的请求必须在处理前通过这些中间件,这些中间件处理 <a href="/docs/5.4/session">HTTP session</a> 的读写,判断应用是否在维护模式, <a href="/docs/5.4/csrf">验证 CSRF token</a> 等等。</p><p>HTTP 内核的标志性 <code class=" language-php">handle</code> 方法是相当简单的:接收一个 <code class=" language-php">Request</code> 并返回一个 <code class=" language-php">Response</code>。你可以把内核想成一个代表你应用的大黑盒子。给它喂 HTTP 请求然后它就会吐给你 HTTP 响应。</p><h4>服务提供者</h4><p>在内核引导启动的过程中最重要的动作之一就是载入 <a href="/docs/5.4/providers">服务提供者</a> 到你的应用。所有的服务提供者都配置在 <code class=" language-php">config<span class="token operator">/</span>app<span class="token punctuation">.</span>php</code> 文件中的 <code class=" language-php">providers</code> 数组中。 首先,所有提供者的 <code class=" language-php">register</code> 方法会被调用,接下来,一旦所有提供者注册完成,<code class=" language-php">boot</code> 方法将会被调用。</p><p>服务提供者负责引导启动框架的全部各种组件,例如数据库、队列、验证器以及路由组件。因为这些组件引导和配置了框架的各种功能,所以服务提供者是整个 Laravel 启动过程中最为重要的部分。</p><h4>分发请求</h4><p>一旦应用完成引导和所有服务提供者都注册完成,<code class=" language-php">Request</code> 将会移交给路由进行分发。路由将分发请求给一个路由或控制器,同时运行路由指定的中间件。</p><p><a name="focus-on-service-providers"></a></p><h2><a href="#focus-on-service-providers">聚焦服务提供者</a></h2><p>服务提供者是 Laravel 应用的真正关键部分,应用实例被创建后,服务提供者就会被注册完成,并将请求传递给应用进行处理,真的就是这么简单!</p><p>了解 Laravel 是怎样通过服务提供者构建和引导一个稳定的应用是非常有价值的,当然,应用的默认服务提供者都存放在 <code class=" language-php">app<span class="token operator">/</span>Providers</code> 目录中。</p><p>在新创建的应用中,<code class=" language-php">AppServiceProvider</code> 文件中方法实现都是空的。这个提供者是你添加应用专属的引导和服务的最佳位置,当然的,对于大型应用你可能希望创建几个服务提供者,每个都具有粒度更精细的引导。</p><h2>译者署名</h2><table><thead><tr><th>用户名</th><th>头像</th><th>职能</th><th>签名</th></tr></thead><tbody><tr><td><a href="https://github.com/dongm2ez">@麦索</a></td><td><img class="avatar-66 rm-style" src="https://avatars3.githubusercontent.com/u/9032795?v=3&s=460?imageView2/1/w/100/h/100"></td><td>翻译</td><td>Follow me <a href="https://github.com/dongm2ez">@dongm2ez</a> at Github</td></tr></tbody></table></article>
- 入门指南
- 安装
- 配置信息
- 文件夹结构
- 请求周期
- 开发环境部署
- Valet
- Homestead
- 核心概念
- 服务提供者
- Facades
- Contracts
- 服务容器
- HTTP 层
- 路由
- 中间件
- CSRF 保护
- 控制器
- 请求
- 响应
- 视图
- Session
- 表单验证
- 前端
- Blade 模板
- 本地化
- 前端指南
- 编辑资源 Mix
- 安全
- API 认证
- 用户认证
- 用户授权
- 加密解密
- 哈希
- 重置密码
- 数据库
- 快速入门
- 查询构造器
- 分页
- 数据库迁移
- Redis
- 数据填充
- Eloquent ORM
- Eloquent ORM快速入门
- 模型关联
- Eloquent 集合
- 修改器
- 序列化
- 综合话题
- Artisan 命令行
- 广播系统
- 缓存系统
- 集合
- 错误与日志
- 事件系统
- 文件存储
- 辅助函数
- 邮件发送
- 消息通知
- 扩展包开发
- 队列
- 任务调度