2017 © Pedro Peláez
 

library php-hydrator

Convert model to dto, convert dto to model

image

alexpts/php-hydrator

Convert model to dto, convert dto to model

  • Saturday, July 29, 2017
  • by alexpts
  • Repository
  • 1 Watchers
  • 4 Stars
  • 88 Installations
  • PHP
  • 1 Dependents
  • 0 Suggesters
  • 0 Forks
  • 1 Open issues
  • 3 Versions
  • 1 % Grown

The README.md

php-hydrator

phpunit codecov, (*1)

Одни и те же данные нужно представить в разном виде. В коде удобно работать с высокоуровневыми моделями. Но для сохранения этих данных в базу данных, как правило, данные требуется перевести в более простой вид, обычно в ассоциативный массив. Для передачи данных между приложениями используют простые DTO сущности., (*2)

Компонент позволяет легко конвертировать ваши данные в ассоциативный массив из модели и обратно заполнять вашу модель данными., (*3)

Extractor

Задача класса Extractor извлечь из вашей модели данные согласно указанынм правилам., (*4)

$extractor = new Extractor;
$normalizer = new \PTS\Hydrator\Normalizer;

$model = new Model([
    'id' => 1,
    'name' => 'Alex'
    'email' => 'some@web.dev'
]);

$rules = [
   'id' => [], // prop as dto`s key
   'name' => [
       'prop' => 'name', // prop is name field in model
   ],
   'email' => [
       'get' => 'getEmail', // getter $model->getEmail();
   ]
];
$rules = $normalizer->normalize($rules);

$extractor->extract($model, $rules)

Правила извлечения данных описываются в виде ассоциативного массива, где ключ массива это имя ключа в DTO сущности. Наприимер поле модели name можно замапить в поле с именем login в DTO сущности таким образом., (*5)


$rules = [ 'login' => [ 'prop' => 'name', ], ... ]; $extractor->extract($model, $rules);

Извлечение через prop позволяет извлеч из модели поле с любой областью видимости (public/protect/private). Если значение prop не указано явно, то оно равно имени ключа DTO сущности. В следующем примере это будет значение name., (*6)


$rules = [ 'name' => [], ... ]; $rules = $normalizer->normalize($rules); $extractor->extract($model, $rules)

Помимо извлечения данных свойств из модели, данные можно получить через вызов метода модели (getter)., (*7)


$rules = [ 'name' => [ 'get' => 'getName', // getter $model->getName(); ], ]; $extractor->extract($model, $rules);

Геттер имеит более высокий приоритет, чем свойтво prop., (*8)

Hydrator

Класс Hydrator позволяет наполнить модель данными., (*9)

$hydrator = new Hydrator;

$dto = [
    'id' => 1,
    'login' => 'Alex'
    'email' => 'some@web.dev
];

$rules = [
    'id' => [], // prop as dto`s key
    'login' => [
        'prop' => 'name', // dto key login fill property name
    ],
    'email' => [
        'set' => 'setEmail', // setter $model->setEmail();
    ]
];
$rules = $normalizer->normalize($rules);

$model = $hydrator->hydrate($dto, Model::class, $rules);

$model2 = new Model;
$hydrator->hydrateModel($dto, $model2, $rules);

Правила гидрации точно такие же как и у extractor сущности., (*10)

HydratorService

Класс HydratorService является совмещает в себе Hydrator и Extractor. Также он требует правил в виде сущности Rules, которая сглаживает правил и позволяет описывать их более лаконично, (*11)

$hydratorService = new HydratorService;
$rules = [
    'id' => [], // prop as dto`s key
    'login' => [
        'prop' => 'name', // dto key login fill property name
    ],
    'email' => [
        'set' => 'setEmail', // setter $model->setEmail();
    ]
];
$rules = $normalizer->normalize($rules);

$dto = $hydratorService->extract($model, $rules);
$model = $hydratorService->hydrate($dto, Model::class, $rules);

Больше возможностей

Если требуется рекурсивная гидрация/извлечение зависимостей, требуется декларативно объявлять правила трансформации, вызывать pipe функции для фильтрации значения, то стоит воспользоваться надсткойкой над этой билбиотекой - https://github.com/alexpts/php-data-transformer2, (*12)

The Versions

29/07 2017

dev-only-hydrator

dev-only-hydrator https://github.com/alexpts/php-hydrator

Convert model to dto, convert dto to model

  Sources   Download

MIT

The Requires

  • php ^7.1

 

The Development Requires

by Avatar alexpts

model mapper converter data transform dto

17/06 2017

dev-master

9999999-dev https://github.com/alexpts/php-hydrator

Convert model to dto, convert dto to model

  Sources   Download

MIT

The Requires

  • php ^7.1

 

The Development Requires

by Avatar alexpts

model mapper converter data transform dto

17/06 2017

1.0.0

1.0.0.0 https://github.com/alexpts/php-hydrator

Convert model to dto, convert dto to model

  Sources   Download

MIT

The Requires

  • php ^7.1

 

The Development Requires

by Avatar alexpts

model mapper converter data transform dto