transformers / mapping-transformer
整合Mapper,使用映射转换数组集合。
3.0.0
2022-12-07 22:14 UTC
Requires
- php: ^8.1
- scriptfusion/mapper: ^1|^2
- scriptfusion/porter: ^7
Requires (Dev)
- mockery/mockery: ^1.5
- phpunit/phpunit: ^9.5.23
- roave/security-advisories: dev-latest
README
MappingTransformer将Mapper集成到Porter中,以支持使用Mapping
对象进行数据转换。由于Mapper的详细讨论超出了本文件的范畴,但链接的存储库包含完整的文档。MappingTransformer通过提供一种名为SubImport
的强大映射策略在Mapper的基础上进行扩展。
子导入
SubImport
策略提供了一种将数据集联合起来的方式。一个映射可以包含任意数量的子导入,每个子导入都可以接收不同的ImportSpecification
。子导入使Porter开始一个新的导入操作,因此可以无限制地支持所有导入选项,包括从不同的提供商导入以及为每个子导入应用不同的映射。
签名
SubImport(ImportSpecification|callable $specificationOrCallback)
$specificationOrCallback
– 一个ImportSpecification
实例或返回此类实例的callable
。
ImportSpecification 示例
以下示例导入MyImportSpecification
并将输入数据中的foo字段复制到输出映射中。然后它使用MyDetailsSpecification
进行子导入,并将结果存储在输出映射的details键中。
$records = $porter->import( (new MyImportSpecification) ->setMapping(new AnonymousMapping([ 'foo' => new Copy('foo'), 'details' => new SubImport(MyDetailsSpecification), ])) );
回调示例
以下示例与上一个示例相同,但现在的MyDetailsSpecification
需要一个标识符,该标识符来自输入数据中的details_id。这仅使用回调才有可能,因为我们不能在规范中注入策略。
$records = $porter->import( (new MyImportSpecification) ->setMapping(new AnonymousMapping([ 'foo' => new Copy('foo'), 'details' => new SubImport( function (array $record) { return new MyDetailsSpecification($record['details_id']); } ), ])) );