PHPackages                             dvasilenko/datamapper\_tools - 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. [Utility &amp; Helpers](/categories/utility)
4. /
5. dvasilenko/datamapper\_tools

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

dvasilenko/datamapper\_tools
============================

Useful utilities DataMapper

1.0.1(5y ago)07MITPHPPHP &gt;=7.2CI failing

Since Feb 7Pushed 5y ago1 watchersCompare

[ Source](https://github.com/denis-vasilenko/datamapper_tools)[ Packagist](https://packagist.org/packages/dvasilenko/datamapper_tools)[ RSS](/packages/dvasilenko-datamapper-tools/feed)WikiDiscussions master Synced 1w ago

READMEChangelogDependencies (2)Versions (3)Used By (0)

\#DataMapper

DataMapper помогает вам преобразовать один формат данные в другой, вы можете получить как массив данных, так и XML.

[![Latest Stable Version](https://camo.githubusercontent.com/2b26db5bd3e29381f2d4678e0c2819d8bb72a573cdb179415825581992220e94/68747470733a2f2f706f7365722e707567782e6f72672f64766173696c656e6b6f2f646174616d61707065725f746f6f6c732f76)](//packagist.org/packages/dvasilenko/datamapper_tools) [![Total Downloads](https://camo.githubusercontent.com/00b49bd48c5ce9d6bbf4bb3c5b8f4b8dc6baac4cf66d9e3e59e192f902ad3062/68747470733a2f2f706f7365722e707567782e6f72672f64766173696c656e6b6f2f646174616d61707065725f746f6f6c732f646f776e6c6f616473)](//packagist.org/packages/dvasilenko/datamapper_tools) [![Latest Unstable Version](https://camo.githubusercontent.com/3b5a29a4643a3c9379ea85afa71c670214ea3e76f54f7a8e0c26ffd8e52d74b5/68747470733a2f2f706f7365722e707567782e6f72672f64766173696c656e6b6f2f646174616d61707065725f746f6f6c732f762f756e737461626c65)](//packagist.org/packages/dvasilenko/datamapper_tools) [![License](https://camo.githubusercontent.com/b5ce214cd59a9539162e856cb663230bbdcf78681f6f7e434d2748016f860538/68747470733a2f2f706f7365722e707567782e6f72672f64766173696c656e6b6f2f646174616d61707065725f746f6f6c732f6c6963656e7365)](//packagist.org/packages/dvasilenko/datamapper_tools)

Содержание
----------

[](#содержание)

1. [Установка](#install)
2. [Использование](#use)
    1. [Создать свой DataMapper](#create-selft-datamapper)
    2. [Настройка своего DataMapper](#config-selft-datamapper)
    3. [Создание своего обработчика типа данных](#create-selft-resolve-type)
    4. [Использование DataMapper](#use-selft-datamapper)
3. [Обработчики данных по умолчанию](#default-resolve-type)
    1. [Дата и время](#datatime-resolve-type)
    2. [Константа](#define-resolve-type)
    3. [Справочник](#directory-resolve-type)
    4. [Простой](#simple-resolve-type)

Установка
---------

[](#установка)

Установка с помощью Composer

```
composer require dvasilenko/datamapper_tools
```

Использование
-------------

[](#использование)

Необходимо создать класс описывающий правила преобразования данных, отнаследовавшись от базавого класса BaseDataMapper.

Базово поддерживается 4 типа данных:

- Дата и время
- Константа
- Справочник
- Простой тип

При необходимости можно расширить своими типами данных.

Создать свой DataMapper
-----------------------

[](#создать-свой-datamapper)

```
use DataMapper\Tools\BaseDataMapper;

class MyDataMapper extends BaseDataMapper
{
    protected $rules = [
        'ruleCode' => [],
    ];
}
```

Настройка своего DataMapper
---------------------------

[](#настройка-своего-datamapper)

Обращение к элементам вложенного массива осуществляется через точку "."

Например, правила ниже позволяют обратиться к значениям элемента "client" и "order"

```
/**
 * Если необходимо проверить на XSD, привязка к ключу правила, значение путь к xsd файлу
 * @var array
 */
protected $xsd = [
    //'ruleCode' => '',
];

/**
 * Корневой XML документ
 * @var string
 */
protected $xml = '';

/**
 * Если необходимо задать корневому узлу параметр xmlns, для данных в  XML
 * @var
 */
protected $targetNamespace;

/**
 * Правила маппинга (пример использования разных обработчиков данных)
 * @var array
 */
protected $rules = [
    'clientOrder' => [
        ['type' => 'Define', 'value' => '1', 'field' => 'Client.Type', 'params' => ['attribute' => 'id']],
        ['type' => 'Simple', 'key' => 'client.id', 'field' => 'Client.Id'],
        ['type' => 'Simple', 'key' => 'client.name', 'field' => 'Client.Name'],
        ['type' => 'MyNameSpace\\DataMapper\\Resolve\\Fio', 'field' => 'Client.FIO', 'params' => ['name' => 'client.name', 'lastName' => 'client.lastName']],
        ['type' => 'DateTime', 'key' => 'client.dateBirth', 'field' => 'Client.DateBirth', 'params' => ['format' => 'd.m.Y']],
        [
            'type' => 'Directory',
            'key' => 'client.gender',
            'field' => 'Client.Gender',
            'params' => [
                'conformity' => [
                    'man' => 'M',
                    'woman' => 'F',
                ],
            ],
        ],
        ['type' => 'Simple', 'key' => 'order.id', 'field' => 'Client.Order.Id'],
    ],
];
```

Создание своего обработчика типа данных
---------------------------------------

[](#создание-своего-обработчика-типа-данных)

Класс обработчика должен реализовывать интерфейс ResolveInterface

```
use DataMapper\Tools\Contracts\ResolveInterface,
    DataMapper\Tools\Resolve\Base;

class Fio extends Base implements ResolveInterface
{
    public static function run(array $val, array $data)
    {
        $name = self::getValByKey($val['params']['name'], $data);
        $lastName = self::getValByKey($val['params']['lastName'], $data);

        return implode(' ', [$lastName, $name]);
    }
}
```

Использование DataMapper
------------------------

[](#использование-datamapper)

```
use MyDataMapper;

$data = [
    'client' => [
        'id' => 1,
        'name' => 'Имя',
        'lastName' => 'Фамилия',
        'dateBirth' => '2000-01-01',
        'gender' => 'man',
    ],
    'order' => [
        'id' => 1,
    ],
];

$uploadData = [
    'client' => $clientData,
    'order' => $orderData,
];

$dataMapper = new MyDataMapper;
// Если нужен массив данных
$data = $dataMapper->getData('clientOrder', $uploadData);
```

Результат:

```
Array
(
    [Client] => Array
        (
            [Type] => Array
                (
                    [attributes] => Array
                        (
                            [id] => 1
                        )
                )
            [Id] => 1
            [Name] => Имя
            [FIO] => Фамилия Имя
            [DateBirth] => 01.01.2000
            [Gender] => M
            [Order] => Array
                (
                    [Id] => 1
                )
        )
)

```

Если нужен XML

```
$data = $dataMapper->getXmlString('clientOrders', $uploadData);
```

Результат:

```

        1
        Имя
        Фамилия Имя
        01.01.2000
        M

            1

```

Обработчики данных по умолчанию
-------------------------------

[](#обработчики-данных-по-умолчанию)

Базово поддерживается 4 типа данных:

- ### Дата и время

    [](#дата-и-время)

Необходимо указать формат времени (поддерживаются форматы нативного класса DateTime). Если значение передается в числовом виде, то считается, что это TimeStamp, так же можно отметить, что значение времени передается в милисекундах:

```
'type' => 'DateTime', 'key' => '', 'field' => '', 'params' => ['format' => 'd.m.Y', 'isMillisecond' => true]

```

- ### Константа

    [](#константа)

Можно указать, чтоб значение передавалось как часть параметра в ввиде аттрибута:

```
'type' => 'Define', 'key' => '', 'field' => '', params => ['attribute' => 'id']

```

- Справочник
    ----------

    [](#справочник)

Ниже перечислены разные варианты, допускается возможность их комбинирования.

Если нужно указать массив соответствий с условием числовых диапазонов:

```
'type' => 'Directory', 'key' => '', 'field' => '',  params => [
    'conformityCondition' => [
        ['from' => 1, 'to' => 30, 'value' => 1],
        ['from' => 31, 'to' => 60, 'value' => 2],
        ['from' => 61, 'to' => 90, 'value' => 3],
        ['from' => 91, 'to' => 180, 'value' => 4],
        ['from' => 181, 'to' => 365, 'value' => 5],
        ['from' => 366, 'to' => 1095, 'value' => 6],
        ['from' => 1096, 'value' => 7],
        ['value' => 8],
    ]
]

```

Простой массив соответсвтий:

```
'type' => 'Directory', 'key' => '', 'field' => '', 'params' => [
    'conformity' => [
        'man' => 'M',
        'woman' => 'F',
    ],
    'default' => 'M',
],

```

Если нужно предварительно привести к числовому типу данных (int):

```
type='Directory', 'key' => '', 'field' => '', 'params' => ['type' => 'int']

```

Если нужно отсеять по доп. полям:

```
type='Directory', 'key' => '', 'field' => '', 'params' => [
    'propertyCode' => '',// код поля, содержащим массив доп. полей
    'propertyId' => '',// наименование нужного поля
    'propertyRowId' => '',// атрибут хранящий значение
],

```

Можно указать, чтоб значение передавалось как часть параметра в ввиде аттрибута:

```
'type' => 'Directory', 'key' => '', 'field' => '', 'params' => ['attribute' => 'id']

```

- Простой тип
    -----------

    [](#простой-тип)

Можно указать ключ "funcs", в котором перечислить функции, которыми необходимо обработать полученное значение:

```
'type' => 'Simple', 'key' => '', 'field' => '', 'funcs' => 'trim|mb_strtoupper'

```

Можно указать, чтоб значение передавалось как часть параметра в ввиде аттрибута:

```
type='Simple', key='' field='' params=['attribute' => 'id']

```

###  Health Score

22

—

LowBetter than 22% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity4

Limited adoption so far

Community4

Small or concentrated contributor base

Maturity49

Maturing project, gaining track record

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.

###  Release Activity

Cadence

Every ~0 days

Total

2

Last Release

1925d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/2e4eb0bf642e2a526ef3721a00f6679506fd00b119d64f6b8b32b50a5d5180f6?d=identicon)[denis-vasilenko](/maintainers/denis-vasilenko)

---

Tags

phpmapperdatamapper

### Embed Badge

![Health badge](/badges/dvasilenko-datamapper-tools/health.svg)

```
[![Health](https://phpackages.com/badges/dvasilenko-datamapper-tools/health.svg)](https://phpackages.com/packages/dvasilenko-datamapper-tools)
```

PHPackages © 2026

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