fastnorth/property-mapper

转换数据结构

1.0.2 2024-04-12 17:41 UTC

README

Build Status Code Climate

常见的编程任务之一是将数据结构转换为彼此,例如将来自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'));