fastnorth / property-mapper
转换数据结构
1.0.2
2024-04-12 17:41 UTC
Requires
- symfony/property-access: ~2.7|~3.2|~4.0|~5.0|~6.0|~7.0
Requires (Dev)
- phpunit/phpunit: ^4.8
- symfony/var-dumper: ~2.7|~3.2|~4.0
This package is not auto-updated.
Last update: 2024-09-14 18:27:55 UTC
README
常见的编程任务之一是将数据结构转换为彼此,例如将来自API或数据库的数据处理为内部使用对象。这个库帮助创建可以
- 反向操作
- 独立编写
- 组合
- 重用
- 测试
使用方法
映射操作有两步,首先定义一个 Map
,指定哪些属性映射到哪些属性,然后可以使用 Mapper
将其应用于两个实体。此库内部使用 Symfony的PropertyAccess 组件从给定的实体中读取和写入,因此它们可以是对象和数组。属性符号遵循PropertyAccess的符号。
创建映射
创建映射仅需要指定映射两边的所有属性
<?php use FastNorth\PropertyMapper\Map; $map = new Map; $map ->map('someProperty', 'toAnotherProperty'); ->map('yetAnotherProperty', 'toSomethingElse');
应用映射
可以通过创建一个 Mapper
并调用 process()
来应用映射
<?php use FastNorth\PropertyMapper\Map; // $map = ...; $objectOne = new ClassOne; $objectTwo = new ClassTwo; $mapper = new Mapper; // Applies the map, taking properties from $objectOne and applying them to $objectTwo $mapper->process($objectOne, $objectTwo, $map);
映射也可以通过使用 reverse()
来反向应用
<?php // Applies the map in reverse, taking properties from $objectTwo and applying them to $objectOne $mapper->reverse($objectOne, $objectTwo, $map);
转换值
映射操作的一部分是从操作的一侧获取值,对其应用转换操作,然后将其应用于另一侧。例如,日期/时间可能在一端以字符串或整型时间戳存储,但在另一端是一个PHP DateTime
对象。FastNorth PropertyMapper通过“转换器”的概念支持这一点。
转换器是双向的,这意味着它们可以在两个方向上处理数据,允许映射器在 reverse()
中处理映射。
向映射中添加转换器
任何转换器(实现 FastNorth\PropertyMapper\Transformer\TransformerInterface
)都可以作为 map()
的第三个参数传递
<?php use FastNorth\PropertyMapper\Map; use FastNorth\PropertyMapper\Transformer\Datetime\StringToDateTime; $map = new Map; $map->map('aStringDateProperty', 'aDateTimeProperty', new DateTimeTransformer('Y-m-d'));