PHP Data Transfer Object Library
You should extend your class by TseDTO
.
$ composer require tsetsee/php-dto
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
}
-
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.
Format | Description |
---|---|
x | timestamp by milliseconds |
X | timestamp by seconds |
<?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;
}
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;
}
}