Download the PHP package alexpts/php-data-transformer2 without Composer
On this page you can find all versions of the php package alexpts/php-data-transformer2. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download alexpts/php-data-transformer2
More information about alexpts/php-data-transformer2
Files in alexpts/php-data-transformer2
Package php-data-transformer2
Short Description Convert model to dto, convert dto to model
License MIT
Homepage https://github.com/alexpts/php-data-transformer2
Informations about the package php-data-transformer2
php-data-transformer2
Позволяет извлекать данные из объектов и создавать объекты из данных. Позволяет делать это по заранее опрелделенной схеме в обе стороны. Например извлечь данные из Model для записи в БД. Либо создать/заполнить Model данными из БД.
Install
composer require alexpts/php-data-transformer2
Библиотека представляет собой более высокий уровень билбиотеки https://github.com/alexpts/php-hydrator. Расширяя ее возможности и упрощая работу за счет:
- Декларативного описания правил преобразования
- Рекурсивного преобразования вложенных моделей и коллекций моделей
- Более лаконичного синтаксиса
Базовые правила схем трансформации подробно описаны в проекте https://github.com/alexpts/php-hydrator.
Data Transformer
Класс DataTransformer является более высокоуровневым. Он позволяет работать с HydratorService и описывать схемы преобразования для каждого класса отдельно.
Для одного класса может быть множество схем преобразования. Для преобразования модели для сохранения в БД требуется преобразовать ее в DTO сущность (массив php). При этом все значения типа \DateTime преобразовать в timestamp (integer тип). Если мы передаем эту же модель на клиент через REST API, то схема преобразования может быть иной. Все значения \DateTime нужно представить в виде строки в формате ISO8601.
Вариации представлений
Может потребоваться для разных сценариев извлекать данные по разным правиоам из модели.
Либо может быть просто более компактное представлеиние этой же модели, без лишних деталей. Можно использовать несколько схем для 1 модели, например short.dto
:
Также можно исключить часть полей, без необъодимости определять новую схему/map для преобразования, указав при вызовы опцию excludeFields
с массивом игнорируемых полей в схеме:
Коллекция моделей
Небольшой сахар, чтобы перевести коллекцию однотипных моделей в коллекцию DTO:
Вложенные модели
Если свойство модели представлено другой моделью или коллекцией моделей, то можно рекурсивно извлечь/заполнить модель. Для этого в схеме маппинга нужно использовать ключ ref
.
Логика в pipe обработчиках
Обработчики pipe позволяют описывать callable методы и писать любую логику, которая будет применяться к значению. В pipe обработчиках можно кастить типы. Либо шифровать поля перед записью в БД. В случае необходимости, чтобы вся логика маппинга была в 1 месте, вы может прокинуть любые зависимости через замыкание в функцию pipe, достав их из контейнера $this->getContainer()
.