メインコンテンツへスキップ

概述

本章节涵盖官方文档中不易了解的 Laravel 内部实现,以及聚焦于包开发的进阶主题。我们将结合源码解读,讲解实用的设计模式与扩展方法。

包开发

Laravel 包开发

从以服务提供者为核心的包开发基础,到发布配置、视图、迁移文件的完整流程。

使用 Orchestra Testbench 测试 Laravel 包

使用 Orchestra Testbench 搭建包的测试环境,验证服务提供者、Facade 与数据库。

使用 Testbench Workbench 进行包开发

搭建接近真实应用的验证环境,构建包含路由、迁移、服务启动的开发流程。

包的版本兼容性管理

应对 Laravel 与 PHP 版本升级的包维护策略,以及 GitHub Actions 测试矩阵配置。

GeneratorCommand — 实现自定义 make: 命令

通过继承 GeneratorCommand 实现包专属的 make: 命令。

包配置的合并与缓存

理解浅层合并与递归替换的区别,并在兼顾已发布配置和配置缓存的前提下进行维护。

包迁移的发布与更新

讲解发布与直接加载的区别、时间戳变更与重新发布的风险,以及如何向现有用户交付结构变更。

包视图的覆盖与更新

讲解视图的查找顺序、已发布模板的兼容性,以及考虑 Blade 缓存的更新步骤。

包的路由注册与缓存

讲解中间件与名称的分离,以及配置变更与重新创建路由缓存之间的关系。

包缓存与 optimize 的集成

讲解自定义任务的注册键、排除指定、执行顺序以及失败时的处理。

包的公开资源与更新

讲解 JavaScript 和 CSS 的分发、标签的选择范围、覆盖以及 Composer 更新时的重新发布。

包翻译的覆盖与更新

讲解 PHP 翻译的部分覆盖、JSON 翻译的共享键,以及不破坏已发布翻译的更新方法。

包的服务解析后钩子

讲解使用 callAfterResolving() 的延迟配置、对已解析服务的应用以及幂等性的注意事项。

包的 Artisan 命令注册与依赖解析

讲解注册、实例化与执行的区别,以及通过向 handle() 注入依赖来隔离副作用。

包的事件监听器注册与缓存

讲解显式注册与自动发现的区别、避免重复注册、event:cache 的对象以及更新时的验证。

包服务的生命周期设计

讲解 scoped 的内部实现、singleton 所持有的依赖,以及长驻 worker 中的状态隔离。

包的中间件注册与适用范围

讲解别名注册与应用的分离、避免覆盖中间件组,以及缓存时的验证。

包的 Blade 扩展与编译缓存

讲解自定义指令与条件语句的执行时机,以及更新时的缓存管理。

包的 Storage 驱动注册与重新解析

讲解创建逻辑的注册、磁盘的保持与重新解析,以及 fake 之外所需的验证。

包的自定义通知渠道与投递验证

讲解基于类名的渠道解析、接收者路由、队列处理以及实际投递测试。

包的容器标签与插件聚合

讲解 tagged() 的延迟解析与 giveTagged() 的数组化,以及重复注册和生命周期的注意事项。

包的 HTTP 客户端与测试

讲解共享 Factory 的使用、按请求隔离状态,以及使用 fake 验证通信内容与异常。

包的日志通道扩展与重新解析

讲解 custom 与 via、自定义驱动的注册,以及考虑已保留通道和回退的验证方法。

包的自定义缓存存储与契约

讲解注册时机、Store 与 Repository 的分工、TTL 转换以及锁等功能的支持范围。

包的邮件传输注册与测试

讲解 Mailer 名称与 Transport 名称的区分、配置变更后的重新解析,以及 fake 无法验证的发送路径。

包的上下文属性与依赖解析

讲解通过自定义属性注入配置、解析优先级、make 与 call 的区别,以及已创建服务的生命周期。

包的定时任务注册与维护

讲解显式启用、在 Schedule 解析后注册、重复注册与锁名称,以及配置变更时的验证。

包的自定义 Session 驱动

讲解处理器的存储契约、显式选择、TTL 与存储格式,以及已创建 Store 的保持与验证。

包的数据库连接扩展

讲解按连接名与驱动名进行扩展、创建的优先级,以及连接的保持与重新创建。

包的动态关联注册

在不修改模型的情况下添加关联,并验证显式键、名称冲突与继承,以及注册状态的生命周期。

在扩展包中注册字符串验证规则

讲解向 Factory 注册、消息与翻译、Implicit 与 Dependent 的区别,以及已创建 Validator 的生命周期。

框架内部

Laravel 11 之后的应用结构

全面解析 Slim Application Skeleton,以及从 Application::configure() 到 ApplicationBuilder 的内部实现。

Macroable trait

向现有 Laravel 类添加自定义方法的 Macroable trait 的机制与实践模式。

Conditionable trait

when()/unless() 方法的内部实现,以及用于设计流畅 API 的实践模式。

Illuminate\Support\Manager — 驱动系统剖析

自 Laravel 4.0 沿用至今的驱动系统核心类。从自定义驱动的注册到 MultipleInstanceManager。

Pipeline 模式

Illuminate\Pipeline\Pipeline 类的原理,以及将多个处理步骤链式组合的模式。

InteractsWithData trait

在包开发中为自定义类实现数据访问 API 的 trait 设计详解。

tap() 辅助函数与 Tappable trait

Laravel tap() 辅助函数与 Tappable trait 的使用方式与实现模式。

PHP 属性

使用 Laravel 13 引入并强化的 PHP 属性,以声明式方式配置 Job 与 Model。

once() 辅助函数的内部实现

Once、Onceable 类基于 WeakMap 的缓存机制,及其在 Eloquent 的 PreventsCircularRecursion 中的应用。

Eloquent 深入

Eloquent 自定义类型转换

实现 CastsAttributes 接口的自定义 Cast。介绍 Value Object 模式、入站 Cast 与 Castables。

Eloquent Observer 与模型事件

Eloquent 模型触发事件的机制,以及通过 Observer 类集中管理事件。

Eloquent 作用域

本地作用域与全局作用域的机制。从 SoftDeletingScope 等内部实现到实用场景。

Collection Deep Dive

从历史、类结构、PHPDoc Generics、阅读路径等多角度解析 Laravel Collection 的实现。

集合的高阶消息

集合的高阶消息(Higher-order Messages)的机制与实用用法。

Eloquent 的 afterQuery 与查询结果的契约

讲解本地作用域的结果处理,以及各查询方法在类型、执行次数和分页判断上的差异。

MCP 与 AI

用 Laravel 构建 MCP 服务器

使用 laravel/mcp 包构建可用于生产环境的 MCP 服务器。涵盖 Tool、Resource、Prompt 的实现以及认证。

创建 AI SDK 的自定义 Provider

阅读 Laravel AI SDK 的源码,为标准未提供的 AI 服务实现自定义 Provider。

创建 Boost 的自定义 Agent

深入 Laravel Boost 的扩展架构,讲解如何创建自定义 Agent。

Laravel AI SDK 的智能体中间件

讲解每个步骤的执行顺序、模型响应后的处理,以及基于累计 token 的停止。

认证、验证及其他

实现自定义认证 Guard

从源码层面讲解通过实现 Guard、StatefulGuard 接口来创建自定义认证 Guard 的方法。

自定义验证规则

深入内部实现,讲解如何通过规则对象或闭包扩展验证功能。

限流的自定义

深入 RateLimiter Facade,按用户、套餐、IP 地址等实现自定义限流。

使用 Pest 进行进阶测试

系统讲解 Pest 的进阶用法,涵盖 Expectation API、数据集、Fake 与 Mockery。
最終更新日 2026年11月7日