Laravel 11 现已发布,包括 PHP v8.2 最低版本要求、新的 Laravel Reverb 包、简化的目录结构等等...
Laravel Reverb
Laravel Reverb 是 Laravel 应用程序的新一代原生 WebSocket 服务器,为客户端和服务器之间提供实时通信。Reverb 的一些特性包括。
极速
Reverb 为速度进行了精细调校。单个服务器可以支持数千个连接,并传输数据而不会出现 HTTP 轮询的延迟和低效。
无缝集成
使用 Laravel 的广播功能进行开发。使用 Reverb 的原生 Laravel Forge 集成进行部署。利用内置的 Pulse 支持进行监控。
为扩展而设计
通过利用 Reverb 的内置 Redis 水平扩展支持来无限扩展容量,允许您跨多个服务器管理连接和通道。
Pusher
Reverb 使用 Pusher 协议进行 WebSocket 通信,使其立即与 Laravel 广播和 Laravel Echo 兼容。
简化的目录结构
在全新安装中,文件数量减少了约 69 个。不错。
查看我们关于全新 Laravel 11 目录结构 的文章。
- 控制器默认不再扩展任何内容。
- 不再有中间件目录。
目前,Laravel 包含 9 个中间件,其中很多你可能永远不会自定义。但是,如果你确实想自定义它们,它们会被移动到 App/ServiceProvider 中。例如
public function boot(): void{ EncryptCookies::except(['some_cookie']);}
不再有 Http/Kernel
您过去在 Kernel 中可以做的很多事情,现在可以在 Bootstrap/App 中完成。
return Application::configure() ->withProviders () -›withRouting( web: __DIR__.'/../routes/web.php' commands: __DIR__.'/../routes/console.php', ) ->withMiddleware(function(Middleware Smiddleware) { $middleware->web(append: LaraconMiddleware::class): })
模型转换变化
模型转换现在被定义为一个方法而不是一个属性。当定义为方法时,我们可以做其他事情,比如直接从转换中调用其他方法。以下是一个使用 Laravel 11 中新的 AsEnumCollection
的示例
protected function casts(): array{ return [ 'email_verified_at' => 'datetime', 'password' => 'hashed', 'options'=› AsEnumCollection::of(UserOption::class), ];}
新的可转储特性
这旨在简化框架的核心,因为目前多个类具有 "dd" 或 "dump" 方法。另外,您可以在自己的类中使用此 Dumpable
特性
class Stringable implements JsonSerializable, ArrayAccess{ use Conditionable, Dumpable, Macroable, Tappable; str('foo')->dd(); str('foo')->dump();
阅读有关新的 可转储特性 的更多信息。
配置变化
Laravel 有很多配置文件,Laravel 11 删除了这些文件,所有配置选项都级联下来。.env
已扩展以包含您可能想要设置的所有选项。
阅读有关 配置变化 的更多信息。
新的 Once 方法
Laravel 11 包含一个新的 once 辅助方法,该方法可确保无论您调用对象方法多少次,都始终获得相同的值。当您有一些想要确保只运行一次的代码时,once 函数非常有用。
简化的默认迁移
当您启动一个新的 Laravel 应用程序时,它会附带一些 2014 年和 2019 年的默认迁移。这些迁移现在将删除日期并合并到两个文件中。
观看我们的 Instagram 短视频
路由变化
默认情况下,将只有两个路由文件,console.php 和 web.php。API 路由现在可以通过 php artisan install:api
启用,为您提供 API 路由文件和 Laravel Sanctum。
WebSocket 广播也是一样,php artisan install:broadcasting
。
新的 up 健康路由
Laravel 11 将包含一个新的 /up
健康路由,该路由会触发 DiagnosingHealthEvent
,以便您更好地与正常运行时间监控集成。
APP_KEY 轮换
在旧版本的 Laravel 中,如果您更改了 APP_KEY
,可能会导致数据库中的数据损坏。Laravel 11 有一个新的平滑轮换,它不会破坏旧的加密数据,使用 APP_PREVIOUS_KEYS
逗号分隔的列表 .env 变量。它将使用新密钥自动重新加密数据。
Console Kernel 已移除
Console Kernel 已被移除,您现在可以在 routes/console.php
中直接定义您的控制台命令。
命名参数
命名参数 不受 Laravel 向后兼容性准则的涵盖。为了改进 Laravel 代码库,他们可能会在必要时选择重命名函数参数。当使用命名参数调用 Laravel 方法时,应谨慎操作,并了解参数名称将来可能会发生变化。
预加载限制
Laravel 11 集成了 "eager load limit" 包背后的代码
User::select('id', 'name')->with([ 'articles' => fn($query) => $query->limit(5)])->get();
阅读有关 预加载限制 的更多信息。
新的 Artisan 命令
添加了新的 Artisan 命令,允许快速创建类、枚举、接口和特性
php artisan make:classphp artisan make:enumphp artisan make:interfacephp artisan make:trait
新的欢迎页面
除了对 Laravel 的重大更新外,我们还将在创建新的 Laravel 应用程序时获得新的 欢迎页面。
Laravel 11 何时发布?
Laravel 11 将于 2024 年 3 月 12 日发布
PHP 8.2 最低版本支持
这是早期的决定,但 Laravel 11 应用程序需要最低 PHP 8.2 版本。如果您运行的是旧版本的 PHP,现在是升级的好时机。
SQLite 3.35.0+ 必需
如果您使用 SQLite 数据库,则 Laravel 11 将需要 SQLite 3.35.0 或更高版本。
移除 Doctrine DBAL
Laravel 不再依赖 Doctrine DBAL,并且不再需要注册自定义 Doctrines 类型来正确创建和更改以前需要自定义类型的各种列类型。
安装 Laravel 11
安装 Laravel 11 最简单的方法是先设置 Laravel 安装程序
composer global require laravel/installer
然后运行
laravel new projectname
升级到 Laravel 11
Laravel Shift 是升级 Laravel 最简单的方法,但您也可以按照 Laravel 文档 中的升级指南进行操作。
Laravel 支持政策
对于所有 Laravel 版本,错误修复提供 18 个月,安全修复提供 2 年。对于所有其他库,包括 Lumen,只有最新的主要版本接收错误修复。
版本 | PHP (*) | 发布 | 错误修复截止日期 | 安全修复截止日期 |
---|---|---|---|---|
Laravel 9 | 8.0 - 8.2 | 2022 年 2 月 8 日 | 2023 年 8 月 8 日 | 2024 年 2 月 6 日 |
Laravel 10 | 8.1 - 8.3 | 2023 年 2 月 14 日 | 2024 年 8 月 6 日 | 2025 年 2 月 4 日 |
Laravel 11 | 8.2 - 8.3 | 2024 年 3 月 12 日 | 2025 年 9 月 3 日 | 2026 年 3 月 12 日 |
12 | 8.2 - 8.3 | 2025 年第一季度 | 2026 年第三季度 | 2027 年第一季度 |
总结
到目前为止,所有这些功能都被认为是 Laravel 11 的测试版,旨在改进您的工作流程。事情可能会发生变化,也可能会发生变化,我们将随着新功能的发布而更新此帖子。