traineratwot / json2dto
Convert JSON files to Spatie DTO objects
Installs: 15
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
Type:project
pkg:composer/traineratwot/json2dto
Requires
- php: >=8.2
- ext-json: *
- illuminate/support: ~5.5 || ~6.0 || ~7.0 || ~8.0 || ~9.0
- nette/php-generator: ^3.3
- spatie/laravel-data: ^3.12
- symfony/console: ^4.2 || ^5.0
Requires (Dev)
- mockery/mockery: ^1.0
- phpunit/phpunit: ^9.5
- spatie/phpunit-snapshot-assertions: ^4.0
README
Инструмент для генерации DTO-классов на основе JSON-данных с поддержкой вложенных DTO, сборки multipart-структур и валидационных атрибутов от Spatie Laravel Data.
Установка / Installation
# Установить глобально composer global require traineratwot/json2dto # Установить в проекте (для локального использования) composer require traineratwot/json2dto --dev
Использование / Usage
Запускайте инструмент из корня проекта (там, где находится composer.json), чтобы правильно разрешить пространства имён через PSR-4. Ввод JSON принимается из файла (второй аргумент) или из stdin.
json2dto generate [options] [--] <namespace> [<json>]
Примеры / Examples
# Генерация DTO с PHP 7.4 типизацией ./vendor/bin/json2dto generate "App\DTO" test.json --classname "Test" --typed # Генерация DTO с вложенными DTO и всеми полями nullable ./vendor/bin/json2dto generate "App\DTO" test.json --classname "Test" --nested --optional # Генерация объединённого DTO для массива объектов (multipart) ./vendor/bin/json2dto generate "App\DTO" tests.json --classname "TestCollection" --multipart # Использование stdin cat test.json | ./vendor/bin/json2dto generate "App\DTO" --classname "Test"
Опции / Options
| Опция | Описание / Description |
|---|---|
--classname, -name |
Название корневого DTO-класса (NewDto по умолчанию) / Root DTO class name (NewDto by default) |
--nested |
Генерировать вложенные DTO для объектов и массивов объектов / Generate nested DTOs for nested objects and collections |
--typed |
Использовать PHP-типы для свойств конструктора (>=7.4) / Enable PHP typed properties (>=7.4) |
--optional |
Сделать все поля nullable с значением по умолчанию null / Make every field optional (nullable with default null) |
--multipart |
Слить массив объектов в один DTO, объединяя все поля / Merge array of objects into a single DTO covering all variants |
--dry |
Показать сгенерированные файлы вместо записи на диск / Dry run — print generated files instead of writing them |
Поведение / Behavior
- В режиме
--multipartвходной JSON должен быть массивом объектов. Генерируется DTO, где каждое поле становится опциональным, если отсутствует в каком-то объекте или встречалось какnull. - Ключи, не соответствующие camelCase, автоматически нормализуются, а оригинальные имена мапятся через атрибуты
MapInputName/MapOutputName. - При генерации без
--nestedвложенные объекты остаются типизированными какmixed, но при включении--typedдобавляются соответствующие типы и атрибуты валидации от Spatie Laravel Data. - Строки анализируются на наличие email, URL, UUID, ISO-дат и IP, чтобы добавить соответствующие атрибуты валидации.
Примечания / Notes
- Инструмент работает с PSR-4 пространства имён и создает файлы согласно разрешению namespace → папка. Если в проекте нет
composer.json, файлы будут помещены в текущую директорию. - Для работы генерации атрибутов требуется установленный пакет
spatie/laravel-data.