paulo / data-transfer-object
There is no license information available for the latest version (1.0.0) of this package.
Simple DTO wrapper
1.0.0
2024-02-15 05:24 UTC
Requires
- php: >=8.1
Requires (Dev)
- laravel/pint: ^1.13
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^10.5
README
Проект предназначен для работы с умными объектами (Smart objects) в PHP.
Содержание
Требования
- PHP 8.2 и выше
- Composer
Установка
composer require paulo/data-transfer-object
Умные Атрибуты
PropertyMapFrom
Позволяет указать источник данных для свойства объекта.
#[PropertyMapFrom('source.from.key.innerKey')] public mixed $property;
PropertyMapTo
Позволяет указать место назначения данных для свойства объекта.
#[PropertyMapTo('destination.to.qwe')] public mixed $property;
PropertyIgnoreParse
Игнорирует свойство при парсинге данных.
#[PropertyIgnoreParse] public mixed $property;
PropertyIgnoreSerialize
Игнорирует свойство при сериализации данных.
#[PropertyIgnoreSerialize] public mixed $property;
PropertyInternal
Обозначает внутреннее свойство, которое не будет парситься или сериализоваться.
#[PropertyInternal] public mixed $property;
PropertyParse
Позволяет указать класс, который будет использоваться для парсинга данных для свойства.
#[PropertyParse(DateTime::class)] public DateTime $property;
PropertyParseArray
Позволяет указать класс и дополнительные параметры для парсинга массива данных.
#[PropertyParseArray(InternalClass::class, 'wrap', true)] public array $property;
PropertySerialize
Позволяет указать класс и метод для сериализации данных для свойства.
#[PropertySerialize(InternalClass2::class, 'serialize', true, 'array')] public InternalClass2 $property;
PropertySerializeArray
Позволяет указать класс и метод для сериализации массива данных.
#[PropertySerializeArray(InternalClass2::class, 'serialize', true, InternalClass2::class)] public array $property;
Example
class T extends DataTransferObject { #[PropertyMapTo('test.job.0')] #[PropertyMapFrom('tt')] #[PropertyParse(T::class, 'parse', true)] #[PropertySerialize(T::class, 'serString', true, 'string')] #[PropertySerialize(T::class, 'serInt', true, PhpType::Integer)] #[PropertySerialize(T::class, 'serNull', true, PhpType::NULL)] public mixed $t; public static function parse(mixed $v) { return 'Hello world!'; } public static function serString(string $v) { return substr($v, 0, 5); } public static function serInt(int $v) { return $v * 2; } public static function serNull(mixed $v) { return 'undefined'; } } $t = T::wrap(['tt' => null]); var_dump($t->toArray()); /* array(1) { ["test"]=> array(1) { ["job"]=> array(1) { [0]=> string(5) "Hello" } } } */