PHP Classes

File: doc/samples/try-definition-generator.php

Recommend this page to a friend!
  Classes of Sergii Pryz   Transfer Object   doc/samples/try-definition-generator.php   Download  
File: doc/samples/try-definition-generator.php
Role: Example script
Content type: text/plain
Description: Example script
Class: Transfer Object
Generate transfer objects using property hooks
Author: By
Last change: Removed try-finally on output buffer, fixed try definition generator sample
Standartized samples comments
Date: 6 days ago
Size: 3,102 bytes
 

Contents

Class file image Download
<?php

declare(strict_types=1);

use
Picamator\Doc\Samples\TransferObject\Generated\DefinitionGenerator\ProductTransfer;
use
Picamator\TransferObject\DefinitionGenerator\DefinitionGeneratorFacade;
use
Picamator\TransferObject\Generated\DefinitionGeneratorContentTransfer;
use
Picamator\TransferObject\Generated\DefinitionGeneratorTransfer;
use
Picamator\TransferObject\TransferGenerator\TransferGeneratorFacade;

require_once
__DIR__ . '/../../vendor/autoload.php';

$projectRoot = getenv('PROJECT_ROOT') ?: '';

echo <<<'STORY'
=======================================================
              Imagine there is a Product
=======================================================

STORY;
$productData = [
   
'sku' => 'T-123',
   
'name' => 'Tomato',
   
'price' => 12.99,
   
'currency' => 'EUR',
   
'stock' => 100,
   
'isDiscounted' => false,
   
'deliveryOptions' => [
        [
'name' => 'express'],
        [
'name' => 'standard'],
    ],
   
'details' => [
       
'description' => 'Tomato from fields.',
       
'isRegional' => true,
    ],
   
'stores' => ['DE', 'AT'],
   
'labels' => [
      
'sale' => 'Sale',
    ],
   
'availabilities' => [
       
'2024-12-25' => [
           
'total' => 100,
           
'buffer' => 5,
        ],
       
'2024-12-26' => [
           
'total' => 200,
           
'buffer' => 10,
        ],
    ],
   
'measurementUnit' => [
       
'palette' => [
           
'type' => 'p',
           
'items' => 1_000,
        ],
       
'box' => [
           
'type' => 'b',
           
'items' => 10,
        ],
    ]
];

echo <<<'STORY'
=======================================================
              Generate Definition file
=======================================================

STORY;
$generatorTransfer = new DefinitionGeneratorTransfer()
    ->
fromArray([
       
DefinitionGeneratorTransfer::DEFINITION_PATH => $projectRoot
           
. '/doc/samples/config/definition-generator/definition',
       
DefinitionGeneratorTransfer::CONTENT => [
           
DefinitionGeneratorContentTransfer::CLASS_NAME => 'Product',
           
DefinitionGeneratorContentTransfer::CONTENT => $productData,
        ],
    ]);

$generatedDefinitions = new DefinitionGeneratorFacade()->generateDefinitions($generatorTransfer);

echo
"Definitions $generatedDefinitions were successfully generated.\n";

echo <<<'STORY'
=======================================================
        Generate Transfer Objects
               with notice
   for demonstration exception handling was skipped
=======================================================

STORY;
$configPath = __DIR__ . '/config/definition-generator/generator.config.yml';
new
TransferGeneratorFacade()->generateTransfersOrFail($configPath);

echo <<<'STORY'
=======================================================
        Try newly Generated Transfer Objects
                        &
          Validate $productData fits TO
=======================================================

STORY;

$productTransfer = new ProductTransfer()->fromArray($productData);

var_dump($productData == $productTransfer->toArray());