1. Go to this page and download the library: Download morebec/domain-normalizer 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/ */
morebec / domain-normalizer example snippets
class Order
{
/** @var string */
private $id;
/** @var int */
private $createdAt;
/** @var array<OrderLineItem> */
private $lineItems;
}
class OrderLineItem
{
/**
* @var string
*/
private $productId;
/**
* @var int
*/
private $quantity;
public function __construct(ProductId $productId, int $quantity)
{
$this->productId = $productId;
$this->quantity = $quantity;
}
}
class ProductId
{
/**
* @var string
*/
private $id;
public function __construct(string $id)
{
$this->id = $id;
}
public function __toString()
{
return $this->id;
}
}
use DateTime;
use Morebec\DomainNormalizer\Normalization\Configuration\NormalizerConfiguration;
use Morebec\DomainNormalizer\Normalization\Configuration\ObjectNormalizationDefinitionFactory as DefinitionFactory;
use Morebec\DomainNormalizer\Normalization\Configuration\ObjectNormalizationDefinition as Definition;
use Morebec\DomainNormalizer\Normalization\Normalizer;
use Morebec\DomainNormalizer\Normalization\NormalizationContext;
$config = new NormalizerConfiguration();
$config->registerDefinition(DefinitionFactory::forClass(
Order::class,
static function (Definition $d) {
$d->property('id')
->renamedTo('ID')
->asString();
$d->property('createdAt')->as(static function (NormalizationContext $context) {
$value = $context->getValue();
return (new DateTime("@$value"))->format('Y-m-d');
});
$d->property('lineItems')
->asArrayOfTransformed(OrderLineItem::class);
$d->createProperty('nbLineItems')
->as(static function(NormalizationContext $context) {
return count($context->getObject()->getLineItems());
}
);
})
);
$config->registerDefinition(DefinitionFactory::forClass(
OrderLineItem::class,
static function (Definition $d) {
$d->property('quantity');
$d->property('productId')->asString();
})
);
$normalizer = new Normalizer($config);
$obj = new Order();
$data = $normalizer->normalize($obj);