Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Библиотека для трансформации данных в массивы, на основании предопределенной схемы (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

AltStyle によって変換されたページ (->オリジナル) /