1. Go to this page and download the library: Download ufo-tech/dto-transformer library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
ufo-tech / dto-transformer example snippets
use Ufo\DTO\Attributes\AttrDTO;
class UserDto implements IArrayConstructible, IArrayConvertible
{
use ArrayConstructibleTrait;
use ArrayConvertibleTrait;
public readonly $randomNumber;
public function __construct(
public string $name,
public string $email,
)
{
$this->randomNumber = rand(1, 100);
}
}
class MemberWithFriendsDTO implements IArrayConstructible, IArrayConvertible
{
use ArrayConstructibleTrait;
use ArrayConvertibleTrait;
public function __construct(
public User $user
#[AttrDTO(User::class, collection: true, renameKeys: ['randomNumber' => null])]
public array $friends
) {}
}
$data = [
'user' => [
'name' => 'Alex',
'email' => '[email protected]',
'randomNumber' => 99,
],
'friends' => [
[
'name' => 'Ivan',
'email' => '[email protected]',
'randomNumber' => 23,
],
[
'name' => 'Peter',
'email' => '[email protected]',
'randomNumber' => 14,
]
]
];
$dto = DTOTransformer::fromArray(MemberWithFriendsDTO::class, $data);
var_dump($dto);
//object(MemberWithFriendsDTO)#...
// public $user =>
// object(User)#...
// public $name => "Alex"
// public $email => "[email protected]"
// public $randomNumber => 12
//
// public $friends =>
// array(2) {
// [0] =>
// object(User)#...
// public $name => "Ivan"
// public $email => "[email protected]"
// public $randomNumber => 23
// [1] =>
// object(User)#...
// public $name => "Peter"
// public $email => "[email protected]"
// public $randomNumber => 11
// }
$data = DTOTransformer::toArray($dto);
//[
// 'user' => [
// 'name' => 'Alex',
// 'email' => '[email protected]',
// 'randomNumber' => 12,
// ],
// 'friends' => [
// [
// 'name' => 'Ivan',
// 'email' => '[email protected]',
// 'randomNumber' => 23,
// ],
// [
// 'name' => 'Peter',
// 'email' => '[email protected]',
// 'randomNumber' => 11,
// ]
// ]
//];
use Ufo\RpcObject\DTO\IDTOFromArrayTransformer;
use Ufo\RpcObject\DTO\DTOTransformer;
class OrderDTO
{
public function __construct(
public int $id,
public float $amount,
public DateTimeImmutable $createdAt,
) {}
}
final class OrderTransformer implements IDTOFromArrayTransformer
{
public static function fromArray(
string $classFQCN,
array $data,
array $renameKey = []
): object {
$data['amount'] = (float) $data['amount'];
$data['createdAt'] = new DateTimeImmutable($data['createdAt']);
return DTOTransformer::fromArray($classFQCN, $data, $renameKey);
}
public static function supportsClass(string $classFQCN): bool
{
return is_a($classFQCN, OrderDTO::class, true);
}
}
use Ufo\DTO\Attributes\AttrDTO;
class MemberWithOrdersDTO implements IArrayConstructible, IArrayConvertible
{
use ArrayConstructibleTrait;
use ArrayConvertibleTrait;
public function __construct(
public User $user,
#[AttrDTO(Order::class, collection: true, transformerFQCN: OrderTransformer::class)]
public array $orders
) {}
}
$data = [
'user' => [
'name' => 'Alex',
'email' => '[email protected]',
],
"orders" => [
[
'id' => 101,
'amount' => '199.90',
'createdAt' => '2025-05-09T20:00:00+03:00'
],
[
'id' => 102,
'amount' => '99.90',
'createdAt' => '2025-05-08T12:20:00+03:00'
]
]
];
$dto = DTOTransformer::fromArray(MemberWithOrdersDTO::class, $data);
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.