talanov/data-transfer

Simple library of Data Transfer Object for PHP

Maintainers

Package info

github.com/olehtalanov/data-transfer

pkg:composer/talanov/data-transfer

Transparency log

Statistics

Installs: 27

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

1.0.8 2026-07-06 15:27 UTC

This package is auto-updated.

Last update: 2026-07-06 15:28:47 UTC


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'