Laravel 6.12.0 版本发布,支持从扩展包加载模型工厂
Laravel 开发团队本周发布了 6.12.0 版本,此次更新支持从扩展包加载模型工厂,通过 dump
函数测试 Session 数据,以及很多其他新特性。另外,这次更新还包含了很多第三方开发者贡献的、用于优化重复操作的语法糖,例如过滤请求输入字段中的非布尔值。
下面我们一起来看下其中比较重要的一些新特性:
重要特性
从扩展包加载模型工厂
在 Laravel 6.12 中,你可以在扩展包中直接使用已经存在的模型工厂,而不需要重新创建它们,方法是在服务提供者中引入对应的包含模型工厂的文件,然后就可以使用它们了:
// 在某个服务提供者中...
$this->loadFactoriesFrom('source/database/factories');
// 还可以一次引入多个包含模型工厂的文件
$this->loadFactoriesFrom([
'source_one/database/factories',
'source_two/database/factories',
]);
在响应测试中打印 Session
TestResponse
类中新增了一个 dumpSession()
方法用来打印完整的Session 或者特定键值(Session 的指定键值):
$response->dumpSession();
$response->dumpSession('example');
$response->dumpSession(['example', 'example2']);
Str::isUuid()
辅助函数
新增了一个字符串辅助函数 isUuid()
通过验证 UUID 从 ValidatesAttributes
trait 中解析特定逻辑:
// Returns true
Str::isUuid('a0a2a2d2-0b87-4a18-83f2-2529882be2de');
// Returns false
Str::isUuid('laravel');
请求布尔方法
新增了一个 Request::boolean()
方法用于接受请求输入字段并通过 filter_var
方法来过滤,用来判断某个字段值是否是布尔值,下面是使用示例:
$request = Request::create('/', 'GET', [
'example1' => 'true',
'example2' => 'false',
'checked' => 1,
'checked2' => '1',
'unchecked' => 0,
'unchecked2' => '0',
'name' => 'Jane Doe'
]);
$request->boolean('example1'); // true
$request->boolean('example2'); // false
$request->boolean('checked'); // true
$request->boolean('checked2'); // true
$request->boolean('unchecked'); // false
$request->boolean('unchecked2'); // false
$request->boolean('name'); // false
工厂构建器 createMany()
新增了一个工厂方法 createMany()
用于通过自定义数据创建多条记录:
// Laravel 6.12 版本之前需要这么做
factory(User::class)->create([
'name' => 'Taylor',
]);
factory(User::class)->create([
'name' => 'John',
]);
// 现在可以这么做
factory(User::class)->createMany([
['name' => 'Taylor'],
['name' => 'John'],
]);
你可以在 Github 上查看完整的新特性列表和更新记录,以及 6.11.0 和 6.12.0 的版本差异。
更新日志
新增特性
- 新增
ServiceProvider::loadFactoriesFrom()
方法(#31133) - 新增
TestResponse::dumpSession()
方法(#31131) - 新增
Str::isUuid()
方法(#31148) - 恢复对 PHPUnit 7 的支持(#31113)
- 新增
Request::boolean()
方法(#31160) - 新增
Database\Eloquent\FactoryBuilder::createMany()
方法(#31171、6553d59) - 为 PhpRedis 新增缺失选项(#31182)
问题修复
- 修复
Cache\RedisLock::acquire()
方法存在的问题(#31168、8683a3d) - 修复数据库 url 连接解析时没有指定数据库的问题(#31185)
- 防止表名前缀不明确的列(#31174)
代码优化
- 修复下载大文件时内存使用问题(#31163)
No Comments