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);
// 以前 $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','Dayle']) ->assertExitCode(0);
你还可以在第四个参数传入一个 boolean 类型的值,用来保证选择顺序
$this->artisan('question') ->expectsChoice('What is your name?',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/compa...)
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)
相关更改
- 删除 SWIFT 邮件绑定程序 (#32165)
- 当运行 stub:publish 命令时发布 console stub (#32096)
- 当运行 make:rule 命令时发布 rule stub (#32097)
- 将 midleware.stub 添加到运行 PHP artisan stub:publish 时发布的文件中 (#32099)
- 将 factory.stub 添加到运行 PHP artisan stub:publish 时发布的文件中 (#32100)
- 将 eneder.stub 添加到运行 PHP artisan stub:publish 时发布的文件中 (#32122)
更多学习内容请访问:
八重樱:腾讯T3-T4标准精品PHP架构师教程目录大全,只要你看完保证薪资上升一个台阶(持续更新)