本周,Laravel 团队发布了 v10.38,其中包含 fromRoute()
测试助手、Blade @session
指令、SQLite 的基本 whereJsonContains
支持等等。
作为 Laravel 每周发布的一部分,该团队还将 Vite 5 支持推广到所有 Laravel 一方软件包。例如,当您运行 laravel new
创建新的 Laravel 应用程序或安装 Breeze 时,您将默认使用 Vite 5!
以下是对本周 Laravel 10.38 中引入的新功能的更多信息
fromRoute()
测试助手
添加 @fragkp 为在功能测试中断言重定向响应贡献了 fromRoute()
测试助手。此方法是将路由传递给 from()
测试用例方法的语法糖
// Using the `from()` method$this->from(route('index')) ->get(route('language', ['language' => 'de'])) ->assertRedirectToRoute('index');
现在,您可以将字符串传递给 fromRoute()
方法以方便使用
$this->fromRoute('index') // changed ->get(route('language', ['language' => 'de'])) ->assertRedirectToRoute('index');
charset
和 collation
方法到 Blueprint
添加 @gcazin 为架构 Blueprint 类贡献了两种用于定义字符集和排序规则的新方法
// via propertySchema::table('foo', function (Blueprint $table) { $table->charset = 'utf8mb4'; $table->collation = 'utf8mb4_unicode_ci'; // ...}); // New methodsSchema::table('foo', function (Blueprint $table) { $table->charset('utf8mb4'); $table->collation('utf8mb4_unicode_ci'); // ...});
这些是新方法,因此现有的属性赋值将按预期继续工作。
@session
指令
添加 Blade Jared Lewis 贡献了 @session
blade 指令来检查会话值是否存在。它还支持嵌入式 @session
使用
{{-- Before --}}@if(session('status'))<div class="alert alert-success" role="alert"> {{ session('status') }}</div>@endif {{-- After --}}@session('status')<div class="alert alert-success" role="alert"> {{ $value }}</div>@endsession
whereJsonContains
的支持
添加 SQLite 对 Daniele Ambrosino 贡献了使用 SQLite 数据库的 whereJsonContains
支持
SQLite 从 3.38.0 版本开始默认添加了 JSON 支持。但是,SQLiteGrammar 目前不支持
whereJsonContains
和whereJsonDoesntContain
方法,无论 SQLite 版本如何。
以下是从拉取请求描述中的示例
$users = DB::table('users') ->whereJsonContains('options->languages', 'en') ->get(); /*select * from "users"where exists (select 1 from json_each("options", '$."languages"') where "json_each"."value" is ?)*/ //$users = DB::table('users') ->whereJsonContains('options->languages', false);// the `where` part would look like: `where "json_each"."value" is false`
添加 Conditionable 到 Pipeline
@shane-zeng 贡献了将 Conditionable
特性添加到管道,这使您能够编写没有奇怪条件的管道。
以下是如何在 Laravel 10.38 之前编写带条件的管道的方式
$pipeline = Pipeline::send($user) ->through([ GenerateProfilePhoto::class, ]); if (! $user->isAdmin) { $pipeline->pipe([ SendWelcomeEmail::class, ActivateSubscription::class, ]);} $user = $pipeline->then(fn (User $user) => $user);
现在,您可以使用 Conditionable
的 when
和 unless
方法无缝地链接管道逻辑
$user = Pipeline::send($user) ->through([ GenerateProfilePhoto::class, ]) ->when(! $user->isAdmin, function (Pipeline $pipeline) { $pipeline->pipe([ SendWelcomeEmail::class, ActivateSubscription::class, ]); }) ->then(fn (User $user) => $user);
提高 Arr::dot() 性能
@bastien-phi 贡献了一个更新,改进了 Arr::dot()
性能;在某些情况下,随着数组项数量的增加,它似乎极大地改善了性能。有关更多详细信息,请参阅 拉取请求 #49386。
发布说明
您可以在下面看到新功能和更新的完整列表,以及 10.37.0 和 10.38.0 之间的差异。以下发布说明直接来自 变更日志
v10.38.0
- [10.x] 通过 @fragkp 在 https://github.com/laravel/framework/pull/49366 中添加 routeRoute 方法以通过测试请求
- [10.x] 通过 @chu121su12 在 https://github.com/laravel/framework/pull/49370 中更新导入和错别字
- [10.x] 通过 @PerryvanderMeer 在 https://github.com/laravel/framework/pull/49379 中在
db:table
命令中显示默认false
值 - [10.x] 通过 @mtawil 在 https://github.com/laravel/framework/pull/49374 中为启用了
sql_require_primary_key
的 MySQL 修复主键创建 - [10.x] 通过 @gcazin 在 https://github.com/laravel/framework/pull/49396 中添加
charset
和collation
方法到Blueprint
- 通过 @josecl 在 https://github.com/laravel/framework/pull/49387 中修复了 Octane 上
about
命令的第二次运行 - [10.x] 通过 @Joostb 在 https://github.com/laravel/framework/pull/49393 中修复了 ArrayLock getCurrentOwner 中的错误
- [10.x] Dynamo Batch Repository - 通过 @evan-burrell 在 https://github.com/laravel/framework/pull/49391 中匹配默认 Horizon 排序
- [10.x] 通过 @jrd-lewis 在 https://github.com/laravel/framework/pull/49339 中添加 Blade
[@session](https://github.com/session)
指令 - [10.x] 通过 @bastien-phi 在 https://github.com/laravel/framework/pull/49386 中提高
Arr::dot
性能 - [10.x] 通过 @marcovo 在 https://github.com/laravel/framework/pull/49404 中修复 assertStatus() 参数顺序
- [10.x] 通过 @inxilpro 在 https://github.com/laravel/framework/pull/49402 中仅在之前未设置时设置
defaultCasters
- [10.x] 通过 @Lucas-Schmukas 在 https://github.com/laravel/framework/pull/49399 中修复了
ManagesFrequencies
中的参数类型 - [10.x] 通过 @danieleambrosino 在 https://github.com/laravel/framework/pull/49401 中添加 SQLite 对
whereJsonContains
方法的支持 - [10x.] 通过 @gtjamesa 在 https://github.com/laravel/framework/pull/49413 中在验证中使用原生 json_validate
- [10.x] 通过 @devajmeireles 在 https://github.com/laravel/framework/pull/49408 中将
isEmpty
和isNotEmpty
引入ComponentAttributeBag
- [10.x] 通过 @KieranFYI 在 https://github.com/laravel/framework/pull/49392 中在添加新主键时删除现有主键
- [10.x] 通过 @hafezdivandari 在 https://github.com/laravel/framework/pull/49416 中改进架构构建器
getColumns()
方法 - [10.x] 通过 @onlime 在 https://github.com/laravel/framework/pull/49407 中为纯文本电子邮件通知添加
MailMessage
助手 - [10.x] 通过 @crynobone 在 https://github.com/laravel/framework/pull/49426 中改进测试
- [10.x] 通过 @shane-zeng 在 https://github.com/laravel/framework/pull/49429 中添加 Conditionable 到 Pipeline