PHPackages                             atlcom/dto - 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. atlcom/dto

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

atlcom/dto
==========

Atlcom DTO library

v2.76.4(5mo ago)11.4k↓68.3%1MITPHPPHP ^8.2

Since Nov 12Pushed 5mo ago1 watchersCompare

[ Source](https://github.com/atlcomgit/dto)[ Packagist](https://packagist.org/packages/atlcom/dto)[ Fund](https://yoomoney.ru/to/4100110213116546)[ RSS](/packages/atlcom-dto/feed)WikiDiscussions master Synced yesterday

READMEChangelog (10)Dependencies (3)Versions (40)Used By (1)

Data Transfer Object (dto)
==========================

[](#data-transfer-object-dto)

Dto используется для передачи типизированных данных между слоями приложения, подготовки данных для сохранения в БД или отправки http запросов, с трансформацией в нужный формат.

Класс Dto расширяет функционал объекта для реализации возможности управления объектом и его данными:

- Управление преобразованием типов;
- Управление дефолтными значениями;
- Управление маппингом свойств при заполнении;
- Управление сериализацией объекта в массив или json;
- Управление хуками объекта.

> Для реализации функционала работы с Dto необходимо расширить объект от класса **\\Atlcom\\Dto** или подключить к своему объекту трейт **\\Atlcom\\Traits\\AsDto**.
>
> ```
> class MyDto extends \Atlcom\Dto {}
> ```
>
>
>
> **ИЛИ**
>
> ```
> class MyDto {
>     use \Atlcom\Traits\AsDto;
> }
> ```

**${\\textsf{\\color{red}Начиная с версии Dto 2.61 поддерживается PHP 8.2 и выше}}$**

---

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

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

```
composer require atlcom/dto

```

История изменений
-----------------

[](#история-изменений)

[Открыть историю](docs/CHANGELOG.md)

Описание методов
----------------

[](#описание-методов)

### Создание и заполнение:

[](#создание-и-заполнение)

@method public static **[create](docs/EXAMPLES.md#%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80-01)**(mixed ...$data)
*Создает объект Dto из переданных именованных аргументов / ассоциативного массива / объекта / строки json.*

@method public static **[fill](#%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B)**(array $data)
*Создает объект Dto из переданного ассоциативного массива.*

@method static **[collect](docs/EXAMPLES.md#%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80-31)**(array $items)
*Преобразует массив или коллекцию данных в коллекцию из dto.*

@method public **[fillFromArray](docs/EXAMPLES.md#%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80-21)**(array $data)
*Заполняет объект Dto из переданного ассоциативного массива.*

@method public **[fillFromData](#%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B)**(mixed $data)
*Заполняет объект Dto из переданного ассоциативного массива / объекта / строки json.*

@method public **[fillFromObject](#%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B)**(array $data)
*Заполняет объект Dto из переданного объекта с публичными свойствами.*

@method public **[fillFromDto](#%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B)**(self $data)
*Заполняет объект Dto из другого объекта Dto с публичными свойствами.*

@method public **[fillFromJson](#%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B)**(self $data)
*Заполняет объект Dto из строки json.*

@method public **[merge](docs/EXAMPLES.md#%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80-13)**(object $data)
*Объединяет объект Dto с переданным ассоциативным массивом.*

@method public **[clear](docs/EXAMPLES.md#%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80-48)**()
*Очищает все свойства Dto.*

@method public **[transformToDto](docs/EXAMPLES.md#%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80-34)**(string $dtoClass, array $array = \[\])
*Трансформирует объект Dto в объект другого класса Dto и дополняет данными из массива.*

@method public **[isEmpty](docs/EXAMPLES.md#%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80-39)**()
*Проверяет dto на заполнение хотя бы одного свойства.*

@method public static **[getProperties](docs/EXAMPLES.md#%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80-41)**()
*Возвращает массив свойств dto.*

@method public static **[getPropertiesWithFirstType](docs/EXAMPLES.md#%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80-41)**()
*Возвращает массив всех свойств dto с его первым типом.*

@method public static **[getPropertiesWithAllTypes](docs/EXAMPLES.md#%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80-41)**()
*Возвращает массив всех свойств dto со всеми его типами.*

### Методы сериализации (приведение к массиву/json):

[](#методы-сериализации-приведение-к-массивуjson)

@method public **[toArray](docs/EXAMPLES.md#%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80-29)**(?bool $onlyFilled = null)
*Сериализация Dto в массив.*

@method public static **[toArrayBlank](docs/EXAMPLES.md#%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80-40)**()
*Возвращает массив с пустыми значениями всех свойств dto.*

@method public static **[toArrayBlankRecursive](docs/EXAMPLES.md#%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80-40)**()
*Возвращает массив с пустыми значениями всех свойств dto с рекурсией по объектам.*

@method public **[toJson](docs/EXAMPLES.md#%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80-30)**($options = 0)
*Сериализация Dto в строку json.*

### Переопределяемые методы в дочернем классе (события):

[](#переопределяемые-методы-в-дочернем-классе-события)

@override @method protected **[defaults](docs/EXAMPLES.md#%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80-05)**(): array { return \[\]; }
*Задаёт массив значений для свойств при заполнении Dto по умолчанию.*

@override @method protected **[mappings](docs/EXAMPLES.md#%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80-06)**(): array { return \[\]; }
*Задаёт массив имён свойств для маппинга в другие свойства.*

@override @method protected **[casts](docs/EXAMPLES.md#%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80-08)**(): array { return \[\]; }
*Задаёт массив приведения типов свойств при заполнении Dto.*

@override @method protected **[exceptions](docs/EXAMPLES.md#%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80-33)**(string $messageCode, array $messageItems): string {}
*Возвращает сообщение об ошибке по его коду при работе с Dto.*

@override @method protected **[onCreating](docs/EXAMPLES.md#%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80-44)**(array &amp;$data): void {}
*Метод-хук вызывается перед созданием и заполнением Dto.*

@override @method protected **[onCreated](docs/EXAMPLES.md#%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80-44)**(array $data): void {}
*Метод-хук вызывается после создания и заполнения Dto.*

@override @method protected **[onFilling](docs/EXAMPLES.md#%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80-11)**(array &amp;$array): void {}
*Метод-хук вызывается перед заполнением Dto.*

@override @method protected **[onFilled](docs/EXAMPLES.md#%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80-12)**(array $array): void {}
*Метод-хук вызывается после заполнения Dto.*

@override @method protected **[onMerging](docs/EXAMPLES.md#%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80-13)**(array &amp;$array): void {}
*Метод-хук вызывается перед объединением массива в Dto.*

@override @method protected **[onMerged](docs/EXAMPLES.md#%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80-14)**(array $array): void {}
*Метод-хук вызывается после объединения массива в Dto.*

@override @method protected **[onSerializing](docs/EXAMPLES.md#%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80-15)**(array &amp;$array): void {}
*Метод-хук вызывается перед сериализацией в массив.*

@override @method protected **[onAssigning](docs/EXAMPLES.md#%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80-32)**(string $key, mixed $value): void {}
*Метод-хук выполняется перед изменением значения свойства Dto.*

@override @method protected **[onAssigned](docs/EXAMPLES.md#%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80-32)**(string $key): void {}
*Метод-хук вызывается после изменения значения свойства Dto.*
*Для вызова метода при изменении отдельного свойства требуется PROTECTED или PRIVATE у этого свойства.*

@override @method protected **[onException](docs/EXAMPLES.md#%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80-32)**(Throwable $exception): void {}
*Метод-хук вызывается перед исключением ().*
*Для вызова метода при изменении отдельного свойства требуется PROTECTED или PRIVATE у этого свойства.*

### Цепочки опций сериализации (для приведения к array/json):

[](#цепочки-опций-сериализации-для-приведения-к-arrayjson)

@method public **autoCasts**(bool $autoCasts = true)
*Включение/отключение опции сериализации автоматического приведения типов при заполнении Dto.*

@method public **[autoMappings](docs/EXAMPLES.md#%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80-21)**(bool $autoMappings = true)
*Включение/отключение опции автоматического маппинга свойств при заполнении Dto или преобразовании в массив.*

@method public **[onlyFilled](docs/EXAMPLES.md#%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80-22)**(bool $onlyFilled = true)
*Включение/отключение опции сериализации в массив только заполненных свойств.*

@method public **[onlyNotNull](docs/EXAMPLES.md#%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80-22)**(bool $onlyNotNull = true)
*Включение/отключение опции сериализации в массив только не null свойств.*

@method public **[onlyKeys](docs/EXAMPLES.md#%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80-23)**(string|array|object ...$data)
*Добавление опции сериализации в массив только указанных свойств.*

@method public **[includeStyles](docs/EXAMPLES.md#%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80-24)**(bool $includeStyles = true)
*Добавление опции сериализации в массив для добавления разных стилей свойств camel/snake.*

@method public **[includeArray](docs/EXAMPLES.md#%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80-25)**(string|array ...$data)
*Добавление опции сериализации в массив для добавления дополнительных свойств.*

@method public **[excludeKeys](docs/EXAMPLES.md#%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80-26)**(string|array ...$data)
*Добавление опции сериализации в массив для исключения свойств.*

@method public **[mappingKeys](docs/EXAMPLES.md#%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80-27)**(string|array|object ...$data)
*Добавление опции сериализации в массив для маппинга имён свойств.*

@method public **[serializeKeys](docs/EXAMPLES.md#%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80-28)**(string|array|object|bool ...$data)
*Добавление опции сериализации в массив для преобразования объектов к скалярному типу.*

@method public **[withProtectedKeys](docs/EXAMPLES.md#%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80-32)**(string|array|object|bool ...$data)
*Добавление опции сериализации в массив для добавления protected свойств.*

@method public **[withPrivateKeys](docs/EXAMPLES.md#%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80-32)**(string|array|object|bool ...$data)
*Добавление опции сериализации в массив для добавления private свойств.*

@method public **[withoutOptions](docs/EXAMPLES.md#%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80-36)**(string|array|object|bool ...$data)
*Добавление опции отключения всех ранее установленных опций.*

@method public **[withCustomOptions](docs/EXAMPLES.md#%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80-43)**()
*Включает опцию при преобразовании в массив: преобразование customOptions свойств к массиву.*

@method public **[customOptions](docs/EXAMPLES.md#%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80-37)**(array $options)
*Добавление своих опций в dto.*

@method public **[setCustomOption](docs/EXAMPLES.md#%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80-42)**()
*Добавляет свою опцию в dto.*

@method public **[getCustomOption](docs/EXAMPLES.md#%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80-42)**()
*Возвращает значение своей опции в dto.*

@method public **[for](docs/EXAMPLES.md#%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80-26)**(object $object)
*Добавление опции сериализации в массив для подготовки свойств к заданному объекту/сущности.*

### Реализация интерфейсов:

[](#реализация-интерфейсов)

@interface **ArrayAccess**
*Включает реализацию интерфейса ArrayAccess для работы с dto как с массивом.*

@interface **Countable**
*Включает реализацию интерфейса Countable для включения метода count().*

@interface **IteratorAggregate**
*Включает реализацию интерфейса IteratorAggregate для включения метода getIterator().*

@interface **JsonSerializable**
*Включает реализацию интерфейса JsonSerializable для метода json\_encode($dto).*

@interface **Serializable**
*Включает реализацию интерфейса Serializable для методов serialize($dto)/unserialize($dto).*

@interface **Stringable**
*Включает реализацию интерфейса Stringable для работы с dto как со строкой (string)$dto.*

> ${\\textsf{\\color{red}ВНИМАНИЕ}}$После каждого выполнения toArray() и toJson() все цепочки опций сбрасываются.

---

Примеры:
--------

[](#примеры)

```
$exampleDto = ExampleDto::create(a: 1, b: 2, c: null);
$exampleDto = ExampleDto::fill(['a' => 1, 'b' => 2, 'c' => null]);
```

```
$exampleDto = ExampleDto::create(['a' => 1, 'b' => 2]);
$exampleDto = (new ExampleDto())->fillFromArray(['a' => 1, 'b' => 2]);

$exampleDto = ExampleDto::create((object)['a' => 1, 'b' => 2]);
$exampleDto = (new ExampleDto())->fillFromObject((object)['a' => 1, 'b' => 2]);

$exampleDto = ExampleDto::create('{"a": 1, "b": 2}');
$exampleDto = (new ExampleDto())->fillFromJson('{"a": 1, "b": 2}');
```

```
$exampleDto = ExampleDto::fill(['a' => 1, 'c' => 3])
    ->merge(['b' => 2]);
$exampleArray = $exampleDto
    ->onlyKeys(['a', 'b'])
    ->excludeKeys(['c'])
    ->mappingKeys(['a' => 'aa', 'b' => 'bb'])
    ->serializeKeys(['a', 'b'])
    ->toArray();
```

```
$carEntity = new CarEntity();
$exampleDto = ExampleDto::create();
$exampleArray = $exampleDto->for($carEntity)->toArray();
$exampleArray = $exampleDto->for(CarEntity::class)->toArray();
```

Пример Dependency Injection Dto вместо Request в Laravel
--------------------------------------------------------

[](#пример-dependency-injection-dto-вместо-request-в-laravel)

[Открыть пример для Laravel](docs/LARAVEL.md)

Примеры из тестов
-----------------

[](#примеры-из-тестов)

[Открыть все примеры](docs/EXAMPLES.md)

Переопределяемые методы
-----------------------

[](#переопределяемые-методы)

[Открыть список](docs/OVERRIDES.md)

---

###  Health Score

44

—

FairBetter than 90% of packages

Maintenance71

Regular maintenance activity

Popularity19

Limited adoption so far

Community11

Small or concentrated contributor base

Maturity64

Established project with proven stability

 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.

###  Release Activity

Cadence

Every ~11 days

Recently: every ~20 days

Total

39

Last Release

165d ago

PHP version history (2 changes)v2.55PHP ^8.1

v2.61PHP ^8.2

### Community

Maintainers

![](https://www.gravatar.com/avatar/5e3fe1bcb1aa65d23ffb4ea65ee05450a9d952367bcd4c7157b9b7b3da07befe?d=identicon)[atlcomgit](/maintainers/atlcomgit)

---

Top Contributors

[![atlcomgit](https://avatars.githubusercontent.com/u/35184369?v=4)](https://github.com/atlcomgit "atlcomgit (105 commits)")

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/atlcom-dto/health.svg)

```
[![Health](https://phpackages.com/badges/atlcom-dto/health.svg)](https://phpackages.com/packages/atlcom-dto)
```

###  Alternatives

[illuminate/support

The Illuminate Support package.

630113.0M41.3k](/packages/illuminate-support)[spatie/holidays

Calculate public holidays

402860.1k2](/packages/spatie-holidays)[craftcms/feed-me

Import content from XML, RSS, CSV or JSON feeds into entries, categories, Craft Commerce products, and more.

293952.6k33](/packages/craftcms-feed-me)[solspace/craft-freeform

The most flexible and user-friendly form building plugin!

54681.3k18](/packages/solspace-craft-freeform)[pimcore/data-importer

Adds a comprehensive import functionality to Pimcore Datahub

46855.5k5](/packages/pimcore-data-importer)[flarum/core

Delightfully simple forum software.

201.4M2.3k](/packages/flarum-core)

PHPackages © 2026

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