Skip to content

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

License

Notifications You must be signed in to change notification settings

by25/DataTransformer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

author
Andrey Kulikovsky
Jun 5, 2018
ee59ecf · Jun 5, 2018

History

27 Commits
Feb 3, 2017
Feb 3, 2017
Feb 3, 2017
Feb 3, 2017
Feb 3, 2017
Feb 3, 2017
Feb 3, 2017
Feb 3, 2017
Jun 5, 2018
Feb 3, 2017

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