onmoon/dto-mapper
Composer 安装命令:
composer require onmoon/dto-mapper
包简介
Class to map any array or class tree into DTO
README 文档
README
About
This class helps to map any class or associative array tree into DTO class tree.
It uses reflection to create DTOs but calls getters or reads properties to get values from source tree and only properties found in DTO will be fetched from source object. This makes mapper work fine e.g. with doctrine lazy loads.
For object object if key property property is required, following sources will be
checked:
object->properyobject[property]object->getPropery()object->isPropery()object->hasPropery()object->propery()object->__call('property')
All method calls are case-insensitive.
DTOs must have all their properties typed and all array properties should have phpDoc specifying item types.
Installation
The preferred way to install this extension is through composer.
Run
composer require onmoon/dto-mapper
Usage
public function showPetById(int $petId) : ShowPetByIdResponseDto { $pet = $this->pets->getById($petId); $mapper = new OnMoon\DtoMapper\DtoMapper(); return $mapper->map($pet, ShowPetByIdResponseDto::class); }
DateTime handling
DateTime class does not support creation with reflection. If DTO property is
subclass of DateTimeInterface then this property is set to new \Safe\DateTime
instance. Source values for DateTime can be both DateTimeInterface and string.
Rewriting source properties
By default, mapper searches for the same property in source as in DTO. If you want to read value for some property from another source property, you can pass a callable object as third argument. This callable should always return mapped property name.
$mapper->map($pet, ShowPetByIdResponseDto::class, function ($propertyName, $context) { $fullName = implode('->', [...$context, $propertyName]); if ($fullName === 'subObject->s2->property1') { return 'realProperty1'; } return $propertyName; });
统计信息
- 总下载量: 194
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 0
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2020-05-01