lodipay / php-dto
v1.2.0
2024-04-09 13:23 UTC
Requires
- php: ^8.0
- nesbot/carbon: ^2.62
- symfony/property-access: ^4.0 || ^5.0 || ^6.0
- symfony/serializer: ^4.0 || ^5.0 || ^6.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.11
- pestphp/pest: ^2.33.2
- phpstan/phpstan: ^1.8
README
PHP Data Transfer Object Library
Getting starts
You should extend your class by TseDTO
.
Installation
$ composer require tsetsee/php-dto
Features
toArray()
method only based on the initialized array data.
<?php namespace Tsetsee\DTO\Tests\DTO; use Carbon\Carbon; use Carbon\CarbonImmutable; use Spatie\DataTransferObject\Attributes\CastWith; use Spatie\DataTransferObject\Attributes\MapTo; use Tsetsee\DTO\Casters\CarbonCaster; use Tsetsee\DTO\DTO\TseDTO; class TestDTO extends TseDTO { public string $firstName; public string $lastName; public ?string $familyName = null; public ?int age = null; } ... $dto = new TestDTO([ 'firstName' => 'Tsetsentsengel', 'lastName' => 'Munkhbayar', // 'familyName' => 'Galzuud', 'age' => 31, ]); var_dump($dto->toArray()); ... [Output] array() { ["firstName"] => string(14) "Tsetsentsengel" ["lastName"] => string(10) "Munkhbayar" ["age"] => int 31 }
Handling DateTime
-
php-dto
supports symfony'sDateTimeNormalizer
which handles\DateTimeInterface
,\DateTimeImmutable
,\DateTime
. @see. By default, it uses the RFC3339 format. -
php-dto
supports Carbon. By default, it uses the RFC3339 format.
<?php namespace Tsetsee\DTO\Tests\DTO; use Symfony\Component\Serializer\Annotation\Context; use Tsetsee\DTO\Serializer\Normalizer\CarbonNormalizer; use Tsetsee\DTO\DTO\TseDTO; use Carbon\CarbonImmutable; class TestDTO extends TseDTO { #[Context( normalizationContext: [ CarbonNormalizer::FORMAT_KEY => 'c', ], denormalizationContext: [ CarbonNormalizer::FORMAT_KEY => 'm-d-Y H:i:s', ], )] public ?CarbonImmutable $date = null; }
- Cast from timestamp.
<?php namespace Tsetsee\DTO\Tests\DTO; use Carbon\Carbon; use Tsetsee\DTO\DTO\TseDTO; use Symfony\Component\Serializer\Annotation\Context; use Tsetsee\DTO\Serializer\Normalizer\CarbonNormalizer; class TestDTO extends TseDTO { #[Context( denormalizationContext: [ CarbonNormalizer::FORMAT_KEY => 'X', ], )] public ?Carbon $dateFromTimestamp = null; }
Casting Array
You should add adder method
if the property is an array of DTO.
<?php namespace Tsetsee\DTO\Tests\DTO; use Carbon\Carbon; use Tsetsee\DTO\DTO\TseDTO; use Symfony\Component\Serializer\Annotation\Context; use Tsetsee\DTO\Serializer\Normalizer\CarbonNormalizer; class TestDTO extends TseDTO { /** * @var array<ChildDTO> */ public array $children = []; public function addChildren(ChildDTO $children): void { $this->children[] = $children; } }