Laravel Laravel
  • 前言

    • 发行说明
    • 升级向导
    • 贡献导引
  • 入门指南

    • 安装
    • 配置
    • 文件夹结构
    • 前端
    • 入门套件
    • 部署
  • 架构思想

    • 请求生命周期
    • 服务容器
    • 服务提供者
    • Facades:门面
  • 基础功能

    • 路由
    • 中间件
    • CSRF 保护
    • 控制器
    • 请求
    • 响应
    • 视图
    • Blade 模板
    • Vite编译资产
    • URL 生成
    • Session
    • 表单验证
    • 错误处理
    • 日志
  • 深入话题

    • Artisan 命令行
    • 广播
    • 缓存
    • 集合
    • Contracts:契约
    • 事件
    • 文件存储
    • 辅助函数
    • HTTP 客户端
    • 本地化
    • Mail
    • 消息通知
    • 扩展包开发
    • 队列
    • 速率限制
    • 任务调度
  • 安全

    • 身份认证
    • 授权
    • 邮件验证
    • 加密
    • 哈希
    • 重置密码
  • 数据库

    • 快速入门
    • 查询构造器
    • 分页
    • 数据库迁移
    • 数据填充
    • Redis
  • Eloquent ORM

    • 快速入门
    • 关联关系
    • Eloquent 集合
    • 修改器 & 类型转换
    • API 资源
    • 序列化
  • 测试

    • 快速入门
    • HTTP 测试
    • 命令行测试
    • 浏览器测试
    • 数据库测试
    • 测试模拟器Mocking
  • 官方扩展包

    • Breeze
    • Cashier (Stripe)
    • Cashier (Paddle)
    • Dusk 浏览器测试
    • Envoy 部署工具
    • Fortify 授权生成器
    • Homestead 虚拟机
    • Horizon 队列管理工具
    • Jetstream 全栈开发
    • Mix
    • Octane 加速引擎
    • Passport OAuth 认证
    • Sail 开发环境
    • Sanctum 轻量级 API 认证
    • Scout 全文搜索
    • Socialite 社会化登录
    • Telescope 调试工具
    • Valet 集成环境
  • API 文档
0 0

请求周期
9.x
9.x 8.5 8.x 7.x 6.x 5.8 5.7 5.6 5.5 5.4 5.3 5.2 5.1

Laravel 9 中文文档 /

未匹配的标注

请求生命周期

  • 介绍
  • 生命周期概述
    • 第一步
    • HTTP / Console Kernels
    • 服务提供者
    • 路由
    • 请求结束
  • 聚焦服务提供者

介绍

在 “真实世界” 中使用任何工具时,如果你了解该工具的工作原理,你会更加自信。应用程序开发也不例外。当您了解开发工具的功能时,您会觉得使用它们更舒服、更自信。

本文的目的是让您对 Laravel 框架的工作原理有一个良好的、高层次的理解。通过更好地了解整个框架,一切感觉都不那么 “神奇”,您将更有信心构建您的应用程序。如果你不明白所有的条款,不要灰心!只要试着对正在发生的事情有一个基本的掌握,你的知识就会随着你探索文档的其他部分而增长。

生命周期概述

第一步

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

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

HTTP 或 Console 内核

接下来,传入请求被发送到 HTTP 内核还是 Console 内核,具体取决于进入应用的请求类型。这两个内核充当所有请求流经的中心位置。现在,让我们只关注 HTTP 内核,它位于 app/Http/Kernel.php 中。

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

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

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

服务提供者

最重要的内核引导操作之一是为您的应用程序加载服务提供者。服务提供者负责引导框架的所有各种组件,例如数据库、队列、验证和路由组件。应用程序的所有服务提供者都在config/app.php配置文件的providers数组中进行配置。

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

基本上 Laravel 提供的每个主要功能都是由服务提供商引导和配置的。由于它们引导和配置框架提供的许多功能,服务提供者是整个 Laravel 引导过程中最重要的方面。

路由

应用程序中最重要的服务提供者之一是 App\Providers\RouteServiceProvider。此服务提供者加载应用程序的 routes 目录中包含的路由文件。继续,打开RouteServiceProvider 代码,看看它是如何工作的!

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

中间件为过滤或检查进入应用程序的 HTTP 请求提供了一种方便的机制。例如,Laravel 包含一个这样的中间件,用于验证应用程序的用户是否经过身份验证。如果用户未通过身份验证,中间件将用户重定向到登录页。但是,如果用户经过身份验证,中间件将允许请求进一步进入应用程序。一些中间件被分配给应用程序中的所有路由,比如那些在 HTTP 内核的 $middleware 属性中定义的路由,而一些只被分配给特定的路由或路由组。您可以通过阅读完整的 中间件文档 来了解关于中间件的信息。

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

最后

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

聚焦服务提供者

服务提供者确实是引导 Laravel 应用程序的关键。创建应用程序实例,注册服务提供者,并将请求传递给引导应用程序。就这么简单!
牢牢掌握服务提供者的构建和其对 Laravel 应用处理机制的原理是非常有价值的。你的应用的默认服务提供会存放在 app/Providers 目录下面。

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

本文章首发在 网站上。



原文地址:cndocs/9.x/lif...

译文地址:cndocs/9.x/lif...

上一篇 下一篇

成为Laravel合作伙伴

Laravel Partners是提供一流Laravel开发和咨询服务的精英商店。我们每个合作伙伴都可以帮助您制定一个精美,结构完善的项目.

我们的伙伴
Laravel
亮点
  • Our Team
  • Release Notes
  • Getting Started
  • Routing
  • Blade Templates
  • Authentication
  • Authorization
  • Artisan Console
  • Database
  • Eloquent ORM
  • Testing
资源
  • Laracasts
  • Laravel News
  • Laracon
  • Laracon EU
  • Jobs
  • Certification
  • Forums
  • 版本发布时间
  • 包开发
  • 命令行应用
  • TALL stack全栈开发
  • Blade UI Kit
  • 前端资源构建
伙伴
  • Vehikl
  • Tighten Co.
  • Kirschbaum
  • Byte 5
  • 64 Robots
  • Cubet
  • DevSquad
  • Ideil
  • Cyber-Duck
  • ABOUT YOU
  • A2 Design
  • Romega Software
  • Jump24
  • Become A Partner
生态系统
  • Cashier
  • Dusk
  • Echo
  • Envoyer
  • Forge
  • Homestead
  • Horizon
  • Lumen
  • Mix
  • Nova
  • Passport
  • Scout
  • Socialite
  • Spark
  • Telescope
  • Valet
  • Vapor

Laravel是一个具有表达力,优雅语法的Web应用程序框架。我们认为,发展必须是一种令人愉悦的创造力,才能真正实现。Laravel试图通过减轻大多数Web项目中使用的常见任务来减轻开发的痛苦.

Laravel是Taylor Otwell的商标.
Copyright © 2011-2022 Laravel中文网 LLC.

  • Twitter
  • GitHub
  • Discord
Laravel PHP中文网 推荐使用阿里云