<?php 
 
declare(strict_types=1); 
 
use Picamator\Doc\Samples\TransferObject\Advanced\AddressData; 
use Picamator\Doc\Samples\TransferObject\Advanced\CredentialsData; 
use Picamator\Doc\Samples\TransferObject\Generated\AdvancedTransferGenerator\AdvancedCustomerTransfer; 
use Picamator\Doc\Samples\TransferObject\Generated\TransferGenerator\CustomerTransfer; 
use Picamator\TransferObject\TransferGenerator\TransferGeneratorFacade; 
 
require_once __DIR__ . '/../../vendor/autoload.php'; 
 
echo <<<'STORY' 
======================================================= 
       How to use custom Data Transfer Object 
                        and 
        Apply Transfer Object across modules 
======================================================= 
 
STORY; 
 
echo <<<'STORY' 
======================================================= 
Let's take Generated\TransferGenerator\CustomerTransfer 
======================================================= 
 
STORY; 
$customerTransfer = new CustomerTransfer(); 
$customerTransfer->firstName = 'Ignacy'; 
$customerTransfer->lastName = 'Rzecki'; 
 
echo <<<'STORY' 
======================================================= 
          Let's take Advanced\CredentialsData 
                      use 
            DummyTransferAdapterTrait 
======================================================= 
 
STORY; 
$credentialsData = new CredentialsData(); 
$credentialsData->login = 'ignacy.rzecki'; 
$credentialsData->token = 'Lalka'; 
 
$encodedCredentialsData = json_encode($credentialsData); 
$iteratedCredentialsData = implode(', ', iterator_to_array($credentialsData)); 
 
echo <<<DEBUG 
Count: {$credentialsData->count()} 
JSON encode: $encodedCredentialsData 
Iterated: [$iteratedCredentialsData] 
 
DEBUG; 
 
 
echo <<<'STORY' 
======================================================= 
           Let's take Advanced\AddressData 
                     use 
             TransferAdapterTrait 
======================================================= 
 
STORY; 
$addressData = new AddressData(); 
$addressData->street = 'Krakowskie Przedmie?cie'; 
$addressData->houseNumber = '9'; 
$addressData->city = 'Warszawa'; 
$addressData->postCode = '00-068'; 
$addressData->country = 'Polska'; 
 
$encodedAddressData = json_encode($addressData); 
 
$iteratedAddressData = implode(', ', iterator_to_array($addressData)); 
 
echo <<<DEBUG 
Count: {$addressData->count()} 
JSON encode: $encodedAddressData 
Iterated: [$iteratedAddressData] 
 
DEBUG; 
 
 
echo <<<'STORY' 
======================================================= 
    Create a Definition file combining all objects 
======================================================= 
 
AdvancedCustomer: 
  customer: 
    type: "Picamator\\Doc\\Samples\\TransferObject\\Generated\\TransferGenerator\\CustomerTransfer" 
  address: 
    type: "Picamator\\Doc\\Samples\\TransferObject\\Advanced\\AddressData" 
  credentials: 
    type: "Picamator\\Doc\\Samples\\TransferObject\\Advanced\\CredentialsData" 
 
 
STORY; 
 
echo <<<'STORY' 
======================================================= 
           Generate Transfer Object 
                  with notice 
    for demonstration exception handling was skipped 
======================================================= 
 
STORY; 
$configPath = __DIR__ . '/config/advanced-transfer-generator/generator.config.yml'; 
new TransferGeneratorFacade()->generateTransfersOrFail($configPath); 
 
echo <<<'STORY' 
======================================================= 
        Try newly Generated Transfer Object 
                      and 
                     Debug 
======================================================= 
 
STORY; 
 
$advancedCustomerTransfer = new AdvancedCustomerTransfer(); 
$advancedCustomerTransfer->customer = $customerTransfer; 
$advancedCustomerTransfer->address = $addressData; 
$advancedCustomerTransfer->credentials = $credentialsData; 
 
var_dump($advancedCustomerTransfer->toArray()); 
 
echo <<<'STORY' 
======================================================= 
              Try how fromArray() works 
======================================================= 
 
STORY; 
$advancedCustomerTransfer = new AdvancedCustomerTransfer() 
    ->fromArray([ 
        AdvancedCustomerTransfer::CUSTOMER => [ 
            CustomerTransfer::FIRST_NAME => 'Theodor', 
            CustomerTransfer::LAST_NAME => 'Storm' 
        ], 
        AdvancedCustomerTransfer::ADDRESS => [ 
            'street' => 'Wasserreihe', 
            'houseNumber' => '31', 
            'city' => 'Husum', 
            'postCode' => '25813', 
            'country' => 'Deutschland' 
        ], 
        AdvancedCustomerTransfer::CREDENTIALS => [ 
            'login' => 'theodor.storm', 
            'token' => 'Der Schimmelreiter' 
        ] 
    ]); 
 
var_dump($advancedCustomerTransfer->toArray()); 
 
 |