itmedia/data-transformer

DataTransformer

v0.2.1 2017-02-03 13:53 UTC

This package is auto-updated.

Last update: 2024-09-13 02:03:46 UTC


README

Build Status

这是一个用于将数据转换为数组的库,基于预定义的模式(Transformer)。

安装

composer require itmedia/data-transformer

使用示例

转换器

转换器必须继承自 Itmedia\DataTransformer\Transformer\Transformer 并实现 map($resource) 方法

可以构建转换映射,可以是数组也可以是对象。

class UserTransformer extends Transformer
{
    public function map($resource)
    {
        return [
            'name' => $resource['user_name'],
            'email' => $resource['user_email']
        ];
    }

}

class GroupTransformer extends Transformer
{
    public function map($resource)
    {
        return [
            'id' => $resource['group_id'],
            'name' => $resource['group_name']
        ];
    }

}

数据转换

$resource = [
    'user_name' => 'Tester',
    'user_email' => 'email@email.com',
    'password' => 'mypass',
    'user_group' => [
        [
            'group_id' => 1,
            'group_name' => 'User'
        ],
        [
            'group_id' => 2,
            'group_name' => 'Manager'
        ]
    ]
];


$transformer = new UserTransformer();
$transformer->addCollection(new GroupTransformer('user_group', ['field' => 'groups']));

$transformProvider = new TransformProvider();

$result = $transformProvider->transformItem($resource, $transformer);

结果

[
    'name' => 'Tester',
    'email' => 'email@email.com',
    'groups' => [
        [
            'id' => 1,
            'name' => 'User'
        ],
        [
            'id' => 2,
            'name' => 'Manager'
        ]
    ]
]

选项和转换选项

转换器可以包含其他转换器。

$transformer = new UserTransformer();
$transformer->add(new UserTransformer()); // Обработка одного элемента
$transformer->addCollection(new GroupTransformer($property, $mapping, $options)); // Обработка коллекции элементов

其中

  • $property - 用于选择转换值的属性。可以是数组的键,也可以是对象的名称方法(默认: null)

  • $mapping - 映射选项(拼接成输出数组)。

可用的映射选项

  • field - 转换结果将分配到的数组键名称(默认: null)

    • string - 键名称;
    • null - 自动计算。如果是集合,则值为 $property,否则与根数组连接;
    • false - 与根数组连接。
  • required - 检查 $property 数据的存在(抛出异常)(默认: false)。

  • $options - 转换选项。可用于管理数据转换,例如隐藏某些字段。在 Transformer::defaultOptions() 中描述了可用的转换选项。示例 - Itmedia\DataTransformer\Tests\Stub\Transformer\ArrayGroupTransformer

数据转换

$options = [
    'root_key' => 'data'
];
$transformProvider = new TransformProvider($options);

选项

  • root_key - 将返回的数组包装在 root_key 键中。 (默认: null)

转换单个元素

$transformProvider->transformItem($resource, $transformer);

转换元素集合

$transformProvider->transformCollection($resource, $transformer);