Laravel团队发布了9.33和9.34版本, 引入了Laravel Precognition, 自闭合blade组件的短语法等。

本文也包含Laravel 9.33中发布的关键新功能,该更新在上周五的每周更新时发布。

Laravel Precognition (9.33)

Tim MacDonald贡献了 Precognition 的介绍。本文不会进行详尽的解释,请查看Pull Request #44339以获得对 Precognition 提供的内容的深入描述。

Precognition 是一项新的框架功能,允许开发人员为其用户创建新的和改进的体验。

Precognition 引入了请求/响应标头、中间件,在某些情况下还引入了 Laravel 以独特方式响应的全局帮助器。

当一个 Precognition 请求进入 Laravel 时,直到控制器被执行。这包括所有中间件、路由模型绑定解析、表单请求验证等。

强烈推荐阅读Pull Request #44339来查看如何使用这个令人兴奋的新功能的示例!

自闭合blade组件的短语法 (9.34)

Perry van der Meer为自闭合刀片组件贡献了短属性语法。此 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为PHP8.1最新的“BackedEnum”贡献了 Blade 渲染支持。以下面的路由视图为例:

// routes/web.php
Route::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为mail fakes贡献了缺失的方法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);

发行说明

您可以在下面查看新功能和更新的完整列表以及GitHub 上9.33.0 和 9.34.0之间的差异。以下发行说明直接来自变更日志

v9.34.0

添加

  • 自闭合balde组件的短属性语法 ( #44413 )
  • 添加对 PHP 的 BackedEnum 的支持以在blade视图上“渲染”(#44445

修复

  • 修复了 Symfony 响应的预识别标头(#44424
  • 允许创建带点的数据库 ( #44436 )
  • 修复 windows 上的 dd 源 ( #44451 )

更改

  • 缺少主机时向 db 命令添加错误输出 ( #44394 )
  • 已更改Illuminate/Database/Schema/ForeignIdColumnDefinition::constrained()#44425
  • 允许在基于闭包的侦听器中侦听维护模式事件 ( #44417 )
  • 允许工厂回收给定类型的多个模型 ( #44328 )
  • 改进了多个编辑器和 docker 环境中的 dd 可点击链接 ( #44406 )

v9.33.0

添加

  • 添加Illuminate/Support/Testing/Fakes/MailFake::cc()#44319
  • 将忽略大小写的 Str::contains 和 Str::containsAll 添加到 Stringable contains 和 containsAll ( #44369 )
  • 为 ULID 支持添加了缺失的变形方法 ( #44364 )
  • 介绍 Laravel Precognition ( #44339 )
  • 添加Illuminate/Routing/Route::flushController()#44386

修复

  • 修复 PHPUnit 的 Annotations 注册表上的内存泄漏(#44324#44336
  • Illuminate/Filesystem/FilesystemAdapter::url()用配置修复prefix#44330
  • 修复 Timebox 类中“从浮点数到整数的隐式转换丢失精度”错误(#44357

更改

  • 改进了编译视图的 dd 源代码 ( #44347 )
  • 仅在来自 dump.php ( #44367 )的 dd 调用上打印源代码
  • 确保支持 PHP 8.2 ( #44374 )的 Carbon 版本
(adsbygoogle = window.adsbygoogle || []).push({});