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() 方法(#311716553d59
  • 为 PhpRedis 新增缺失选项(#31182

问题修复

  • 修复 Cache\RedisLock::acquire() 方法存在的问题(#311688683a3d
  • 修复数据库 url 连接解析时没有指定数据库的问题(#31185
  • 防止表名前缀不明确的列(#31174

代码优化

  • 修复下载大文件时内存使用问题(#31163

代码调整

  • 使用 Event::fake() 时在解析缓存仓库时替换事件调度器(#311190a70beb

Vote Vote Cancel Collect Collect Cancel

<< 上一篇: Laravel 6.11.0 版本发布,优化了 Redis 多频道广播逻辑

>> 下一篇: Laravel 6.13.0 版本发布,允许对隐式属性验证消息进行格式化