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