跳转到主要内容
2026 年 10 月新增了一些功能,用于控制请求的表达方式、数据库的读取目标,以及在多台服务器上执行计划任务。Laravel Cloud 简化了邮件发送和定时执行的配置,Forge 则让 PHP 安全更新和预配失败更容易掌握。 本页是基于 11 月 4 日发布的官方博客「Laravel October Product Updates」以及官方 Framework Changelog 10 月部分整理的月度记录。一手资料于 2026 年 11 月 7 日确认,Framework 部分仅涵盖 Laravel 13 系列。不包含 11 月的发布。 参考出处:

Laravel Framework

10 月的发布范围

除官方 Changelog 中的主要新功能外,还根据发布说明确认了日期和引入版本。 下面详细介绍官方 Changelog 中列出的 9 个项目。细小的修复和依赖变更请参阅各发布说明。

使用 QUERY 路由定义带请求体的搜索

v13.35.0 新增了对应 HTTP QUERY 方法的 Route::query()。可以定义通过请求体而不是 GET 查询字符串接收搜索条件的路由。
Route::any() 也会匹配 QUERY 请求,路由列表也能识别该方法。上面的 SearchProductsController 假定为应用中实现了搜索处理的 Invokable Controller。
web 中间件组中的 QUERY 路由会进行 CSRF 验证。不要认为「既然是搜索,就可以像 GET 一样省略验证」,请发送 CSRF 令牌。
一手资料:Register QUERY Routes、Laravel 13 官方 routing.md。相关页面:路由、CSRF 保护

在写入后的其他请求中也避免读取过期数据

在读写分离的数据库中,更新后立即进行的读取可能会发往尚未同步的 Read replica。现有的 sticky 设置只针对同一请求内,而 v13.38.0 的 PreventStaleDatabaseReads 会为同一会话的后续请求也设置保护期。 在 bootstrap/app.php 中 import Illuminate\Foundation\Http\Middleware\PreventStaleDatabaseReads,并在 withMiddleware() 的回调中通过 $middleware->web(append: [PreventStaleDatabaseReads::class]); 添加。该功能不会自动启用。 中间件会把对默认数据库连接的写入时间记录到会话中,默认在写入后的 2 秒内将该连接的读取发往 Write DB。可以把注册的类换成 PreventStaleDatabaseReads::for(5) 等来修改保护期。 由于使用会话,它必须在 StartSession 之后执行。它不会切换其他会话或其他数据库连接的读取,也不会检测副本是否已完成同步。 一手资料:Avoid Stale Reads After Database Writes、Laravel 13 官方 database.md。相关页面:数据库、会话

仅让特定处理从 Write DB 读取

同样在 v13.38.0 中新增的 Connection::usingWritePdo() 只在回调执行期间将该连接的读取目标切换到 Write DB。它不是按会话进行保护,适用于想在应用中明确指定重要读取范围的场景。
它同样适用于使用同一连接的 Eloquent 查询和关联查询。它会返回回调的结果,即使发生异常也会恢复之前的读取设置,因此切换不会残留到后续处理中。 一手资料:Temporarily Read from the Write Database Connection、Laravel 13 官方 database.md

统一将计划任务设置为单服务器执行

为了减少在多台服务器上运行调度器时遗漏为每个任务指定 onOneServer() 的情况,v13.35.0 新增了 Schedule::alwaysOnOneServer()。在 AppServiceProvider 的 boot() 中调用,即可一次性应用到相关的计划任务。
这是一个只有调用后才会生效的默认值。没有名称的计划闭包不在适用范围内,仍会在每台服务器上运行。
onOneServer() 需要所有服务器共享的中央缓存。官方文档列出的支持驱动为 database、memcached、dynamodb 和 redis。仅添加该设置并不会提供跨服务器的锁基础设施。
一手资料:Run Scheduled Tasks on One Server by Default、Laravel 13 官方 scheduling.md。相关页面:任务调度

在 Fake 中指定属性来验证分发

从 v13.35.0 起,可以向 Queue、Bus、Event、Notification 的 Fake 传入期望属性的数组。不再需要为了简单的属性比较而每次都编写回调。 例如,使用带有公开 order 属性的 ShipOrder 任务和测试中准备的 $order 时,可以这样验证:
指定的属性必须全部一致。值会进行严格比较,但 Eloquent 模型使用 is() 比较,因此表示同一模型的不同实例也能匹配。Fake 验证的是分发,而不是任务本身的执行结果。 一手资料:Assert Fake Dispatches by Their Properties、Laravel 13 官方 queues.md。相关页面:队列、模拟

按比例指定 worker 的内存上限

从 v13.35.0 起,queue:work 的 --memory 可以指定相对于 PHP memory_limit 的比例。无需为每个环境重新计算固定的 MB 值,就能按照 PHP 设置调整 worker 的退出阈值。
这不是相对于主机或容器总内存的比例。当 PHP 的 memory_limit 为无限制的 -1 时,请使用 MB 值而不是比例。因达到阈值而退出的 worker 的重启,交由 Supervisor 等进程监控负责。 一手资料:Set Queue Worker Memory Limits as Percentages、Laravel 13 官方 queues.md

以专用 Content-Type 返回 Markdown

v13.35.0 为响应工厂新增了 markdown()。它以 text/markdown 返回 Markdown 正文,也可以指定状态码和附加头。
可以与 wantsMarkdown() 等选择响应格式的处理组合使用。它不是把 Markdown 转换为 HTML 返回的功能,而是把 Markdown 本身作为响应提供的 API。 一手资料:Return Markdown Responses、Laravel 13 官方 responses.md。相关页面:响应

在 Vitess 中以 OLAP 模式执行分析查询

v13.36.0 为 MySQL 连接新增了 isVitess() 和 olap()。可以判断是否在使用 Vitess 或 PlanetScale,并以 OLAP 工作负载执行分析用途的查询。
它会为读取和写入两个连接设置工作负载,并在回调结束时恢复为 OLTP。发生异常时也会恢复,在非 Vitess 的普通 MySQL 连接上,则不改变工作负载直接执行回调。 一手资料:Use OLAP Workloads with Vitess Connections、Laravel 13 官方 database.md

通过 Builder 找到现有验证规则

v13.36.0 为许多以前以字符串指定的规则新增了 Rule 的 Builder 方法。requiredWith()、acceptedIf()、regex()、timezone() 等更容易通过 IDE 补全找到,并且可以在保持现有验证行为的同时选择写法。
方法名采用 camel case。也可以与字符串规则混用,因此无需一次性改写现有规则。 一手资料:Discover More Validation Rules Through Builders、Laravel 13 官方 validation.md。相关页面:校验

Laravel Cloud

官方月度博客介绍了以下 3 个项目。 一手资料:Laravel October Product Updates — Laravel Cloud、Laravel Cloud changelog。相关页面:Laravel Cloud 介绍

Laravel Forge

  • PHP 安全更新通知:按服务器显示受 10 月 PHP 安全发布影响的版本,并提示修复版本的提供情况。可以通过 Recheck versions 重新确认实际安装的版本。重新确认显示和更新 PHP 是不同的操作。
  • 预配失败的处理:将无法完成的服务器显示为失败状态,并提供通知、后续操作指引和删除操作。PHP 和 Nginx 的安装也会在确定失败前重试。
月度博客还提到了发布回顾 10 月 PHP 和 Node.js 安全应对的 Post-mortem。具体应对内容和更新判断,请参阅官方说明。 一手资料:Laravel October Product Updates — Laravel Forge、Laravel Forge changelog

相关文章

2026 年 9 月更新

回顾运行时构建 AI 提供者、搜索扩展、Mercure 以及 Cloud 的隔离预览环境。

数据库指南

确认读写分离和数据库连接的基础知识。
最后修改于 2026年11月7日