Laravel 6.12.0 版本发布,支持从扩展包加载模型工厂

2020-02-19 11:22:26 浏览数 (1)

Laravel 开发团队本周发布了 6.12.0 版本,此次更新支持从扩展包加载模型工厂,通过 dump 函数测试 Session 数据,以及很多其他新特性。另外,这次更新还包含了很多第三方开发者贡献的、用于优化重复操作的语法糖,例如过滤请求输入字段中的非布尔值。

下面我们一起来看下其中比较重要的一些新特性:

1、重要特性

1)从扩展包加载模型工厂

在 Laravel 6.12 中,你可以在扩展包中直接使用已经存在的模型工厂,而不需要重新创建它们,方法是在服务提供者中引入对应的包含模型工厂的文件,然后就可以使用它们了:

代码语言:javascript复制
// 在某个服务提供者中...
$this->loadFactoriesFrom('source/database/factories');

// 还可以一次引入多个包含模型工厂的文件
$this->loadFactoriesFrom([
    'source_one/database/factories', 
    'source_two/database/factories',
]);
代码语言:javascript复制

2)在响应测试中打印 Session

TestResponse 类中新增了一个 dumpSession() 方法用来打印完整的Session 或者特定键值(Session 的指定键值):

代码语言:javascript复制
$response->dumpSession();
$response->dumpSession('example');
$response->dumpSession(['example', 'example2']);
代码语言:javascript复制
3)Str::isUuid 辅助函数

新增了一个字符串辅助函数 isUuid() 通过验证 UUID 从 ValidatesAttributes trait 中解析特定逻辑:

代码语言:javascript复制
// Returns true
Str::isUuid('a0a2a2d2-0b87-4a18-83f2-2529882be2de');

// Returns false
Str::isUuid('laravel');
代码语言:javascript复制

4)请求布尔方法

新增了一个 Request::boolean() 方法用于接受请求输入字段并通过 filter_var 方法来过滤,用来判断某个字段值是否是布尔值,下面是使用示例:

代码语言:javascript复制
$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
代码语言:javascript复制

5)工厂构建器 createMany()

新增了一个工厂方法 createMany() 用于通过自定义数据创建多条记录:

代码语言:javascript复制
// Laravel 6.12 版本之前需要这么做
factory(User::class)->create([
    'name' => 'Taylor',
]);

factory(User::class)->create([
    'name' => 'John',
]);

// 现在可以这么做
factory(User::class)->createMany([
    ['name' => 'Taylor'],
    ['name' => 'John'],
]);

你可以在 Github 上查看完整的新特性列表和更新记录:https://github.com/laravel/framework/blob/e18a984a35b6adcd701966b3bc3da022d7533992/CHANGELOG-6.x.md#v6120-2020-01-21,以及 6.11.0 和 6.12.0 的版本差异:https://github.com/laravel/framework/compare/v6.11.0...v6.12.0。

2、更新日志

1)新增特性
  • 新增 ServiceProvider::loadFactoriesFrom() 方法
  • 新增 TestResponse::dumpSession() 方法
  • 新增 Str::isUuid() 方法
  • 恢复对 PHPUnit 7 的支持
  • 新增 Request::boolean() 方法
  • 新增 DatabaseEloquentFactoryBuilder::createMany() 方法
  • 为 PhpRedis 新增缺失选项
2)问题修复
  • 修复 CacheRedisLock::acquire() 方法存在的问题
  • 修复数据库 url 连接解析时没有指定数据库的问题
  • 防止表名前缀不明确的列
3)代码优化
  • 修复下载大文件时内存使用问题
4)代码调整
  • 使用 Event::fake() 时在解析缓存仓库时替换事件调度器

声明:本文翻译整理自 Laravel News。

0 人点赞