Laravel 9.34 发布
发布于 作者 Paul Redmond
Laravel 团队发布了 9.33 和 9.34,引入了 Laravel 预知功能,自闭合 Blade 组件的简短属性语法等等。
注意:我们还将介绍上周五在典型每周发布之间发布的 Laravel 9.33 中发布的关键新功能。
Laravel 预知功能 (9.33)
Tim MacDonald 贡献了预知功能的引入。虽然本文不包含完整的解释,但请查看 Pull Request #44339,以深入了解预知功能提供的功能。总而言之,以下是 TLDR
预知功能是框架的一项新功能,它将允许开发者为他们的用户创造新的、更完善的体验。
预知功能引入了一个请求/响应头、中间件,以及在某些情况下,一个 Laravel 以独特方式响应的全局助手。
当预知请求进入 Laravel 时,在控制器执行之前会完成所有操作。这包括所有中间件、路由模型绑定解析、表单请求验证等等。
你应该认真阅读 Pull Request #44339,以查看如何利用这项激动人心的新功能的示例!
自闭合 Blade 组件的简短属性语法 (9.34)
Perry van der Meer 为自闭合 Blade 组件贡献了简短属性语法。这个 PR 基于在 Laravel 9.32 中为 Blade 组件发布的简短属性语法。
<!-- current short syntax --><x-profile :$userId></x-profile> <!-- short syntax for self-closing component --><x-profile :$userId/>
在 Blade 视图中渲染 PHP 的“BackedEnum” (9.34)
Nuno Maduro 为支持 BackedEnum 贡献了 Blade 渲染。以以下路由视图示例为例
// routes/web.phpRoute::get('/', function () { return view('dashboard', ['role' => UserRoles:: ADMIN]);});
给定 $role
变量,它现在将正确地渲染在 Blade 中。
Hello, {{ $role }}. <!-- ❌ Before: TypeError: htmlspecialchars(): Argument #1 ($string) must be of type string --><!-- ✅ After: Hello, Admin. -->
向 MailFake 添加 cc() 方法 (9.33)
Adrian Nürnberger 贡献了 MailFake 中缺少的 cc()
方法。实现如下。
public function cc($users){ return (new PendingMailFake($this))->cc($users);}
忽略 Stringable contains() 和 containsAll() 中的大小写 (9.33)
Jae Toole 为 Stringable contains()
和 containsAll()
方法贡献了大小写不敏感的支持。
// returns true$this->stringable('taylor') ->contains(['LOR'], true); // returns true$this->stringable('taylor otwell') ->containsAll(['TAYLOR', 'OTWELL'], true);
发行说明
您可以在下面看到新功能和更新的完整列表,以及 9.33.0 和 9.34.0 之间的差异。以下发行说明直接来自 变更日志
v9.34.0
添加
修复
更改
- 在缺少主机时,将错误输出添加到 db 命令 (#44394)
- 更改了
Illuminate/Database/Schema/ForeignIdColumnDefinition::constrained()
(#44425) - 允许在基于闭包的监听器中监听维护模式事件 (#44417)
- 允许工厂回收给定类型的多个模型 (#44328)
- 改进多个编辑器和 Docker 环境中的 dd 可点击链接 (#44406)
v9.33.0
添加
- 添加了
Illuminate/Support/Testing/Fakes/MailFake::cc()
(#44319) - 添加了 Stringable contains 和 containsAll 中 Str::contains 和 Str::containsAll 的大小写忽略 (#44369)
- 添加了对 ULID 支持的缺少的 morphs 方法 (#44364)
- 引入 Laravel 预知功能 (#44339)
- 添加了
Illuminate/Routing/Route::flushController()
(#44386)
修复
- 修复了 PHPUnit 的 Annotations 注册表上的内存泄漏 (#44324, #44336)
- 修复了
Illuminate/Filesystem/FilesystemAdapter::url()
与 configprefix
(#44330) - 修复了 Timebox 类中“从 float 到 int 的隐式转换会导致精度丢失”错误 (#44357)