PHPackages                             alexpts/php-data-transformer - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. alexpts/php-data-transformer

Abandoned → [alexpts/php-data-transformer2](/?search=alexpts%2Fphp-data-transformer2)Library

alexpts/php-data-transformer
============================

Transform model to data and back

142[2 issues](https://github.com/alexpts/php-data-transformer/issues)PHP

Since Jun 9Pushed 5y ago1 watchersCompare

[ Source](https://github.com/alexpts/php-data-transformer)[ Packagist](https://packagist.org/packages/alexpts/php-data-transformer)[ RSS](/packages/alexpts-php-data-transformer/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependenciesVersions (1)Used By (0)

php-data-transformer
====================

[](#php-data-transformer)

> ## Repository abandoned 2019-12-31
>
> [](#repository-abandoned-2019-12-31)
>
> This repository has moved to [alexpts/php-data-transformer2](https://github.com/alexpts/php-data-transformer2).

[![SensioLabsInsight](https://camo.githubusercontent.com/c913cec3b5b37c45989d12b53e2d9fc4bf300c2bfccaee7a1fdef67ffeff5fb3/68747470733a2f2f696e73696768742e73656e73696f6c6162732e636f6d2f70726f6a656374732f64653034303764392d313266652d346433642d613638382d3962323962313061306534362f6269672e706e67)](https://insight.sensiolabs.com/projects/de0407d9-12fe-4d3d-a688-9b29b10a0e46)

[![Build Status](https://camo.githubusercontent.com/db04d804e02f91b6cd668b3f96f4a003430066e82e835457b1502f05b641932e/68747470733a2f2f7472617669732d63692e6f72672f616c65787074732f7068702d646174612d7472616e73666f726d65722e7376673f6272616e63683d6d6173746572)](https://travis-ci.org/alexpts/php-data-transformer)[![Test Coverage](https://camo.githubusercontent.com/c6c23693c2b020a3d256f29d56aaac87cb1a649288a1ec99ef9f88668b98c257/68747470733a2f2f636f6465636c696d6174652e636f6d2f6769746875622f616c65787074732f7068702d646174612d7472616e73666f726d65722f6261646765732f636f7665726167652e737667)](https://codeclimate.com/github/alexpts/php-data-transformer/coverage)[![Code Climate](https://camo.githubusercontent.com/62ae1c6938bd7457e682f97215d4067a2a02a63e51f0be42f5635419261bb43a/68747470733a2f2f636f6465636c696d6174652e636f6d2f6769746875622f616c65787074732f7068702d646174612d7472616e73666f726d65722f6261646765732f6770612e737667)](https://codeclimate.com/github/alexpts/php-data-transformer)[![Scrutinizer Code Quality](https://camo.githubusercontent.com/663f006ad850700e3ca0b6e65758e12d718fb2e5f4ef64e73320f1d394b77ef4/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f616c65787074732f7068702d646174612d7472616e73666f726d65722f6261646765732f7175616c6974792d73636f72652e706e673f623d6d6173746572)](https://scrutinizer-ci.com/g/alexpts/php-data-transformer/?branch=master)

Более новый и гибкий вариант библиотеки -

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

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

Вся схема маппинга описывается декларативно и вне модели. Позволяя для одной и то же модели описать разные схемы маппинга и трансформации полей. Например поле типа `DateTime` перед сохренением в mongoDB удобно преобразовать в объект типа `MongoDate` или `UTCDateTime`. Перед отдачей клиенту преобразовать его в строку ISO8601. Перед сохранением в redis преобразовать в `timestamp`.

Данные присланные из формы браузера всегда имеют стрковый тип данных, будь то числа или `true/false`. Трансформер решает эту проблему, в моделе данные всегда будут перобразованны в тип, указанный в карте трансформации.

#### Installation

[](#installation)

`$ composer require alexpts/php-data-transformer`

#### Требования

[](#требования)

PHP 7.0+

#### Модели

[](#модели)

Трансформатор никак не ограничивает ваши модели. Вы работаете с чистыми моделями.

#### Трансформеры

[](#трансформеры)

При трансформации модели в массив или массива в модель каждое поле проходит через определнный тип в карте трансформации. Карта трансформации представляет собой yml файл вида:

```
id:
    type: int
    get: getId
login:
    type: string
    get: getLogin
    set: setLogin
name:
    type: string
    prop: name
active:
    type: bool
    prop: active
creAt:
    type: date
    get: getCreAt
email:
    type: string
    prop: email
postsIds:
	type: int
	coll: true
roles:
    type: refModels
    prop: roles
    rel:
        model: \\SomeNamespace\\Role
        map: dto
```

Где ключ является индексом массива.

`type` - тип трансформера

`coll` - \[optional\] true|false является ли значение коллекцией

`prop` - \[optional\] свойство модели

`get` - \[optional\] метод геттер модели (`prop` игнорируется)

`set` - \[optional\] метод сеттер модели (`prop` игнорируется)

`rel` - \[optional\] объект описывающий связанную моделть

`rel.model` - \[optional\] полный стр оковый путь класса связанной модели

`rel.map` - \[optional\] имя карты трансформации вложенной модели \[умолч.: 'dto'\]

#### Менеджер карт трансформации

[](#менеджер-карт-трансформации)

Для регистрации карт трансформации используется метод `setMapDir` объекта типа `MapsManager`. Первый параметр - класс модели. Второй - директория с картами трансформации для этой модели.

```
$mapsManager = new MapsManager(new Parser);
$mapsManager = setMapDir(UserModel::class, __DIR__ . '/transformers');
```

#### Model to DTO

[](#model-to-dto)

```
$transformer = new DataTransformer(
	new TypeConverter,
	$mapsManager,
	new ModelClosure
);
```

Модель передается первым параметром в метод `getData` трансформатора. Вторым параметром указывается имя карты трансформации для этой модели. (по умолчанию `dto`).

```
$user = new User('name', 'login', 'email@gmail.com');
$dtoUser = $transformer->getData($user, 'dto');
```

Путь файла трансформации в этом примере будет иметь вид:

`__DIR__ . '/transformers/dto.yml'`.

#### Data to model

[](#data-to-model)

Через эту же карту транфсформации данные могут быть обратимо преобразованы назад в модель.

```
$data = [
	'name' => 'name',
	'login' => 'login',
	'email' => 'email@gmail.com'
];

$model = $transformer->createModel(User::class);
$transformer->fillModel($data, $model, 'dto');
```

#### Значение как коллекция

[](#значение-как-коллекция)

Если поле модели представлено колелкцией каких-либо значение, то можно прогнать каждое значение коллекции через тип трансформации и получить коллекцию трансформированных значений. Для этого укажите полю в карте трансформации флаг `coll: true`. Тоже самое можно сделать написав собственный тип трансформации, который сам решает как обработать значение-коллекцию.

#### Вложенные модели

[](#вложенные-модели)

Вы можете описывать свои типы трансформации для вложенных моделей. Примером трансформации вложенной коллекции моделей служит тип `refModels`. [Пример трансформации модели с массивом вложенных моделей](https://github.com/alexpts/php-data-transformer/blob/master/example/refs/demo1.php).

Зачастую передавать или хранить вместо вложенной модели разумно только ее id. Примером такой трансформации является тип `refModelsToArrayStringId`. Если id модели должен быть представлен не строковым типом (например `MongoId` или `ObjectId`), то просто опишите свой тип.

#### Подключение собственного типа

[](#подключение-собственного-типа)

Создайте свой тип трансформации с методами `toData` и `toModel`. Новый тип подключается к объекту типа `TypeConverter` методом `addType($name, $type)`. С помощью этого метода, можно перетереть стандатные типы, заместив их собтсвенной реализацией.

Можно отнаследоваться от класса TypeConverter и указать в конуструкторе все дефолтные типы, чтобы не подключать типы вручную.

###  Health Score

14

—

LowBetter than 2% of packages

Maintenance0

Infrequent updates — may be unmaintained

Popularity9

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity33

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://www.gravatar.com/avatar/31106536118e11bf9d0c9d7f467db5b534efa9c46ee76680b308f0c39d9a798c?d=identicon)[alexpts](/maintainers/alexpts)

---

Top Contributors

[![alexpts](https://avatars.githubusercontent.com/u/1306916?v=4)](https://github.com/alexpts "alexpts (54 commits)")

---

Tags

data-mapperdtohydratortransformer

### Embed Badge

![Health badge](/badges/alexpts-php-data-transformer/health.svg)

```
[![Health](https://phpackages.com/badges/alexpts-php-data-transformer/health.svg)](https://phpackages.com/packages/alexpts-php-data-transformer)
```

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
