PHP code example of d3jmc / data-transfer-object

1. Go to this page and download the library: Download d3jmc/data-transfer-object 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/ */

    

d3jmc / data-transfer-object example snippets




namespace App\Dto;

use D3jmc\DataTransferObject\DataTransferObject;

class UserDto extends DataTransferObject
{
    public ?string $firstName = null;
    public ?string $lastName = null;
}



$data = [
    'first_name' => 'John',
    'last_name' => 'Doe',
];

// via the constructor
$userDto = new App\Dto\UserDto($data);

// via the `fill` method
$userDto = new App\Dto\UserDto();
$userDto->fill($data);



// App\Dto\UserDto {#293 ▼
//  +firstName: "John"
//  +lastName: "Doe"
// }
$userDto->get();

// array:5 [▼
//  "firstName" => "John"
//  "lastName" => "Doe"
// ]
$userDto->toArray();



namespace App\Dto;

use D3jmc\DataTransferObject\DataTransferObject;

class UserGdprDto extends DataTransferObject
{
    public bool $email = false;
    public bool $post = false;
    public bool $sms = false;
}



namespace App\Dto;

use D3jmc\DataTransferObject\DataTransferObject;

class UserDto extends DataTransferObject
{
    public ?string $firstName = null;
    public ?string $lastName = null;
    public ?UserGdprDto $gdpr = null;
}



$data = [
    'first_name' => 'John',
    'last_name' => 'Doe',
    'gdpr' => [
        'email' => true,
        'post' => false,
        'sms' => false,
    ],
];



print_r($userDto->get(), true);

// App\Dto\UserDto {#293 ▼
//  +firstName: "John"
//  +lastName: "Doe"
//  +gdpr: App\Dto\UserGdprDto {#298 ▼
//    +email: true
//    +post: false
//    +sms: false
//  }
// }



namespace App\Dto;

use D3jmc\DataTransferObject\DataTransferObject;

class UserRoleDto extends DataTransferObject
{
    public ?string $ident = null;
    public ?string $name = null;
    public ?string $description = null;
}



namespace App\Dto;

use D3jmc\DataTransferObject\DataTransferObject;

class UserDto extends DataTransferObject
{
    public ?string $firstName = null;
    public ?string $lastName = null;
    public ?UserGdprDto $gdpr = null;

    /**
     * @var array<App\Dto\UserRoleDto>
     */
    public array $roles = [];
}



$data = [
    'first_name' => 'John',
    'last_name' => 'Doe',
    'gdpr' => [
        'email' => true,
        'post' => false,
        'sms' => false,
    ],
    'roles' => [
        [
            'ident' => '*',
            'name' => 'Super Admin',
            'description' => 'Unrestricted access to the system',
        ],
    ],
];



print_r($userDto->get(), true);

// App\Dto\UserDto {#293 ▼
//  +firstName: "John"
//  +lastName: "Doe"
//  +gdpr: App\Dto\UserGdprDto {#298 ▼
//    +email: true
//    +post: false
//    +sms: true
//  }
//  +roles: array:1 [▼
//    0 => App\Dto\UserRoleDto {#300 ▼
//      +ident: "*"
//      +name: "Super Admin"
//      +description: "Unrestricted access to the system"
//    }
//  ]
// }



$apiData = [
    'first_name' => 'John',
    'surname' => 'Doe',
];

$userDto = new App\Dto\UserDto($apiData);



$map = [
    // last_name is our DTO property
    // surname is what is returned by the API
    'last_name' => 'surname',  
];



// via the constructor
$userDto = new App\Dto\UserDto($apiData, $map);

// via the `map` method
$userDto = new App\Dto\UserDto();
$userDto->map($map);
$userDto->fill($apiData);



$apiData = [
    'gdpr' => [
        'by_email' => true,
        'by_post' => false,
        'by_sms' => false,
    ],
    'roles' => [
        'id' => '*',
    ],
];

$map = [
    'gdpr' => [
        'email' => 'by_email',
        'post' => 'by_post',
        'sms' => 'by_sms',
    ],
    'roles' => [
        'ident' => 'id',  
    ],
];

$userDto = new App\Dto\UserDto($apiData, $map);



namespace App\Dto;

use D3jmc\DataTransferObject\DataTransferObject;

class UserDto extends DataTransferObject
{
    public ?string $firstName = null;
    public ?string $lastName = null;
    public ?string $displayName = null;

    public function setDisplayName(string $displayName = null): void
    {
        $this->displayName = $displayName ?: "{$this->firstName} {$this->lastName}";
    }
}



namespace App\Dto;

use D3jmc\DataTransferObject\DataTransferObject;

class UserRoleDto extends DataTransferObject
{
    public ?string $ident = null;
    public ?bool $isSu = false;

    public function setIsSu(bool $isSu = false): void
    {
        $this->isSu = ($isSu ?: (bool) ($this->ident === '*'));
    }
}