talanov / data-transfer
Simple library of Data Transfer Object for PHP
1.0.8
2026-07-06 15:27 UTC
Requires
- php: ^8.4
- nesbot/carbon: ^3
Requires (Dev)
- phpunit/phpunit: ^11.0
- rector/rector: dev-main
README
No overheads, no hidden magic.
Installation setup
composer require talanov/data-transfer
Usage
use Talanov\DataTransfer\Attributes\Cast; use Talanov\DataTransfer\Casts\UppercaseCast; use Talanov\DataTransfer\DataTransferObject; final class AccountData extends DataTransferObject { public string $name; #[Cast(UppercaseCast::class)] public string $currency; public ?string $iban = null; #[Cast('float', 0.0)] public ?float $balance = null; public ?string $description = null; }
// From an array: $account = new AccountData([ 'name' => 'My account', 'currency' => 'EUR', 'iban' => 'DE89370400440532013000', 'balance' => '123.45', 'description' => 'My first account', ]); // Using named arguments: $account = new AccountData( name: 'My account', currency: 'EUR', iban: 'DE89370400440532013000', balance: '123.45', description: 'My first account', ); // From an object: $source = (object) [ 'name' => 'My account', 'currency' => 'EUR', 'iban' => 'DE89370400440532013000', 'balance' => '123.45', 'description' => 'My first account', ]; $account = new AccountData($source); // Using a static factory: $account = AccountData::from([ 'name' => 'My account', 'currency' => 'EUR', 'iban' => 'DE89370400440532013000', 'balance' => '123.45', 'description' => 'My first account', ]);
Custom initialization
Override init() to run logic after hydration:
use Talanov\DataTransfer\DataTransferObject; final class PostData extends DataTransferObject { public string $title; public string $slug; protected function init(): void { $this->slug = strtolower(str_replace(' ', '-', $this->title)); } }
$post = new PostData(title: 'Hello World'); echo $post->slug; // 'hello-world'