今天,我们很高兴地宣布发布Laravel 11和Laravel Reverb。
正如我们在 Laracon EU 上宣布的那样,Laravel 11 引入了极简的应用程序结构,默认使用 SQLite,实现了健康路由,提供了每秒速率限制,支持优雅的加密密钥轮换,改进了队列测试,引入了新的 Artisan 命令,添加了 Resend 邮件传输,集成了 Prompt 验证器,等等。看看我们的创始人兼首席执行官 Taylor Otwell 现场演示 Laravel 11 中的新功能
Reverb 是 Laravel 生态系统中的最新成员,它是一个第一方可扩展 WebSocket 服务器,已引入为您的应用程序提供强大的实时功能。
要了解此版本的所有重要细节,请查看我们的官方 版本说明 和 升级指南。下面,我们将介绍一些重点内容。
极简的应用程序结构
Laravel 11 为新的 Laravel 应用程序引入了极简的应用程序结构,无需对现有应用程序进行任何更改。新的应用程序结构旨在提供更精简、更现代的体验,同时保留 Laravel 开发人员已经熟悉的许多概念。
app
文件夹已大大简化;HTTP 和控制台内核均已删除。很少自定义的九个中间件现在已移至框架本身,异常处理程序已删除,Providers
目录已精简为单个提供程序。
以下是新的 app
文件夹的外观
请放心,自定义仍然是优先事项。要调整高级应用程序行为设置,您可以利用重新整理的 bootstrap/app.php
文件。此文件允许您修改应用程序的路由、中间件、服务提供程序、异常处理等
此外,routes
文件夹已简化;api.php
和 channels.php
路由文件默认不再存在,因为许多应用程序不需要这些文件。
相反,可以使用简单的 Artisan 命令创建
php artisan install:api
php artisan install:broadcasting
还有更多!关于 Laravel 的新应用程序结构的许多详细信息我们无法在这篇博文中介绍。务必查看我们的 发行说明 以了解所有内容。
Laravel Reverb
Laravel Reverb 将极速且可扩展的实时 WebSocket 通信直接带到您的 Laravel 应用程序,并提供与 Laravel 现有的事件广播工具(例如 Laravel Echo)的无缝集成。
此外,Reverb 通过 Redis 的发布/订阅功能支持水平扩展,允许您将 WebSocket 流量分布到多个后端 Reverb 服务器,所有服务器都支持单个高需求应用程序。
以下是一个压力测试示例,其中约有 30,000 个客户端与 Reverb 保持开放连接,每个连接订阅 10 个不同的频道,并且每秒交换超过 6,000 条消息
此外,您可以在 Laravel Pulse 中监控 Reverb 服务器的性能,以更好地了解正在处理的连接和消息数量。要深入了解 Laravel Reverb,请查阅完整的 Reverb 文档。
默认情况下使用 SQLite
默认情况下,新的 Laravel 应用程序使用 SQLite 进行数据库存储,以及用于 Laravel 会话、缓存和队列的 database
驱动程序。此外,使用 composer create-project
命令或通过 Laravel 安装程序创建项目将自动创建 SQLite 文件并为您运行初始数据库迁移
这允许您在创建新的 Laravel 应用程序后立即开始构建您的应用程序,而无需安装其他软件或创建其他数据库迁移。
健康路由
新的 Laravel 11 应用程序包含一个健康路由指令,指示 Laravel 定义一个简单的健康检查端点,可以由第三方应用程序健康监控服务或编排系统(如 Kubernetes)调用。默认情况下,此路由在 /up
处提供服务
当向此路由发出 HTTP 请求时,Laravel 将分派一个 DiagnosingHealth
事件,允许您执行与您的应用程序相关的其他健康检查,例如验证数据库连接并确保缓存按预期工作。
队列交互测试
以前,尝试测试已释放、已删除或手动失败的队列作业很麻烦,并且需要定义自定义队列假冒和存根。但是,在 Laravel 11 中,您可以使用 withFakeQueueInteractions
方法轻松测试这些队列交互
除了 assertReleased
断言(您可以使用它来验证作业是否已释放回队列)之外,您还可以使用 assertFailed
或 assertDeleted
断言来确定作业是否分别失败或已删除。
优雅的加密密钥轮换
由于 Laravel 会加密所有 cookie,包括应用程序的会话 cookie,因此对 Laravel 应用程序的每次请求实际上都依赖于加密。但是,由于此原因,轮换应用程序的加密密钥会使应用程序中的所有用户退出登录。此外,无法解密由以前的加密密钥加密的数据。
Laravel 11 允许您通过 APP_PREVIOUS_KEYS
环境变量将应用程序以前的加密密钥定义为逗号分隔的列表
在加密值时,Laravel 将始终使用“当前”加密密钥,该密钥位于 APP_KEY 环境变量中。在解密值时,Laravel 将首先尝试使用当前密钥。如果使用当前密钥解密失败,Laravel 将尝试所有以前的密钥,直到其中一个密钥能够解密该值。
这种优雅的解密方法允许用户即使轮换了加密密钥也能不间断地继续使用应用程序。
有关 Laravel 中加密的更多信息,请查看 加密文档。
还有更多
Laravel 11 中还有很多改进和新功能,我们无法在本帖中全部介绍
我们鼓励您查看 发行说明 和 升级指南,以获取有关 Laravel 11 中新功能和改进的更多信息。
最后,我们要感谢 Laravel 社区对本次发布做出的贡献。我们非常感谢你们中的许多人投入时间和精力,使 Laravel 11 成为现实。
我们希望您喜欢新版本,并期待看到您使用 Laravel 11.0 构建的惊人应用程序!