Skip to content

Библиотека для трансформации данных в массивы, на основании предопределенной схемы (Transformer).

License

Notifications You must be signed in to change notification settings

by25/DataTransformer

Repository files navigation

DataTransformer

Build Status

Библиотека для трансформации данных в массивы, на основании предопределенной схемы (Transformer).

Install

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 - Свойство, по которому будет происходить выборка значения для последующей трансформации. Может быть как ключем массива, так и названием метода объекта (default: null)

  • $mapping - Опции маппинга (склеивания в выходной массив).

Доступные опции маппинга:

  • field Название ключа массива, на который будет присвоен результат трансформации (default: null):

    • string - название ключа;
    • null - автоматически вычислить. Если коллекция, то значение $property иначе объединиться с корневым масивом;
    • false - объединение с корневым масивом.
  • required - Проверить существования данных по $property (выкидывается исключение) (default: false).

  • $options - Опции трансформации. Может использоваться для управления преобразования данных, например для скрытия каких-либо полей. Описываются доступные опции трансформации в Transformer::defaultOptions(). Пример - Itmedia\DataTransformer\Tests\Stub\Transformer\ArrayGroupTransformer

Трансформация данных:

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

Опции:

  • root_key - Обернуть возвращаемый массив в ключ root_key. (default: null)

Трансформация одного элемента:

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

Трансформация коллекции элементов:

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

About

Библиотека для трансформации данных в массивы, на основании предопределенной схемы (Transformer).

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages