Laravel 团队昨天发布了 v7.4.0 版本,其中包含相当多的新特性,例如自定义的模型转换器接口、 When 高阶集合代理,以及从查询构建器中清除现有 order 的功能。
高阶的 When 集合代理
Loris Leiva 贡献了使用高阶代理的能力,它的方法是 Collection::When()
// PR 中的相关代码
$collection->when($condition, function ($collection) use ($item) {
$collection->push($item);
});
// 现在重构为
$collection->when($condition)->push($item);
此 PR 使您能够链接其他高阶代理方法:
// 以前
$collection->when($condition, function ($collection) {
$collection->map->parseIntoSomething();
});
// 现在重构为
$collection->when($condition)->map->parseIntoSomething();
对于Artisan命令行增加expectsChoice()进行选择
Adrian Nürnberger提供了一个控制台测试方法,用于在命令行中询问你的选择。
就像下面这样:
$name = $this->choice('What is your name?', ['Taylor', 'Dayle'], $defaultIndex);
之前你只能断言此问题的回复,不能测试选择:
$this->artisan('question')
->expectsQuestion('What is your name?', 'Taylor')
->assertExitCode(0);
在Laravel7.4,你可以给出选项,像下面这样做:
$this->artisan('question')
->expectsChoice('What is your name?', 'Taylor', ['Taylor', 'Dayle'])
->assertExitCode(0);
你还可以在第四个参数传入一个boolean类型的值,用来保证选择顺序
$this->artisan('question')
->expectsChoice('What is your name?', 'Taylor', ['Taylor', 'Dayle'], true)
->assertExitCode(0);
为Blade的@props标签添加默认值
@props拥有了自定义默认值的能力
<!-- 以前的版本: -->
@props(['type', 'message'])
@php
$type = $type ?? 'info'
@endphp
<!-- Laravel >=7.4 -->
@props(['type' => 'info', 'message'])
Castable 接口
Brent Roose 贡献了一个 Castable 接口,允许 Castable
类型指定其基础类:
// 以前
class ModelX extends Model
{
protected $casts = [
'data' => CastToDTO::class . ':' . MyDTO::class,
];
}
// 现在
class ModelY extends Model
{
protected $casts = [
'data' => MyDTO::class,
];
}
// 基础类
use Illuminate\Contracts\Database\Eloquent\Castable;
class MyDTO implements Castable
{
public static function castUsing()
{
return CastToDTO::class . ':' . static::class;
}
}
从查询构建器中删除 order
Jonathan Reinink 为查询构建器贡献了一个 reorder()
方法,用于重置其 orderBy()
:
$query = DB::table('users')->orderBy('name');
$unorderedUsers = $query->reorder()->get();
重新排序允许您在雄辩的关系中定义默认顺序,并能够在需要时取消:
class Account extends Model
{
public function users()
{
return $this->hasMany(User::class)->orderBy('name');
}
}
// 删除名称 orderBy 和 order by email
$account->users()->reorder()->orderBy('email');
// 同样可以写成:
$account->users()->reorder('email');
发行说明
您可以在下面看到新功能和更新的完整列表以及在Github上看到[7.3.0和7.4.0]之间的区别(https://github.com/laravel/framework/compare/v7.3.0...v7.4.0)
Laravel 7.x的完整发行说明可在最新的[v7更新日志]中找到(https://github.com/laravel/framework/blob/7.x/CHANGELOG-7.x.md#v740-2020-03 -31):
v7.4.0
添加内容
- 可自定义
make:policy
的存档位置 (#32040, 9d36a36) - 为集合添加
HigherOrderWhenProxy
(#32148) - 添加了
Illuminate\Testing\PendingCommand::expectsChoice()
(#32139) - 添加了对于blade中“props”标记的支持(#32177)
- 添加了
Castable
接口 (#32129, 9cbf908, 651371a) - 增加了从查询生成器中删除订单的功能(#32186)
修复
- 在
PendingMailFake::sendNow()
和PendingMailFake::send()
(#32093)中添加了缺少的返回值 - 修复了自定义模型属性转换 (#32118)
- 修复了路由组前缀 (#32135, 870efef)
- 修复固定组件类视图引用 (#32132)
文章评论
哈哈哈
这个评论怎么过的审核啊
这个评论怎么过的审核啊
这个评论怎么过的审核啊
这个评论怎么过的审核啊
这个评论怎么过的审核啊
这个评论怎么过的审核啊
这个评论怎么过的审核啊
有bug
没有
嗯嗯