1. Go to this page and download the library: Download paysera/lib-normalization 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/ */
paysera / lib-normalization example snippets
// ...
class ContactDetailsNormalizer implements NormalizerInterface, ObjectDenormalizerInterface, TypeAwareInterface
{
public function getType(): string
{
return ContactDetails::class;
}
/**
* @param ContactDetails $data
* @param NormalizationContext $normalizationContext
*
* @return array
*/
public function normalize($data, NormalizationContext $normalizationContext)
{
return [
'email' => $data->getEmail(),
// will automatically follow-up with normalization by guessed types:
'residence_address' => $data->getResidenceAddress(),
'shipping_addesses' => $data->getShippingAddresses(),
];
}
public function denormalize(ObjectWrapper $data, DenormalizationContext $context)
{
return (new ContactDetails())
->setEmail($data->getRequiredString('email'))
->setResidenceAddress(
$context->denormalize($data->getRequiredObject('residence_address'), Address::class)
)
->setShippingAddresses(
$context->denormalizeArray($data->getArrayOfObject('shipping_addesses'), Address::class)
)
;
}
}
// ...
class AddressNormalizer implements NormalizerInterface, ObjectDenormalizerInterface, TypeAwareInterface
{
private $countryRepository;
private $addressBuilder;
// ...
public function getType(): string
{
return Address::class;
}
/**
* @param Address $data
* @param NormalizationContext $normalizationContext
*
* @return array
*/
public function normalize($data, NormalizationContext $normalizationContext)
{
return [
'country_code' => $data->getCountry()->getCode(),
'city' => $data->getCity(),
'full_address' => $this->addressBuilder->buildAsText($data->getStreetData()),
];
}
public function denormalize(ObjectWrapper $data, DenormalizationContext $context)
{
$code = $data->getRequiredString('country_code');
$country = $this->countryRepository->findOneByCode($code);
if ($country === null) {
throw new InvalidDataException(sprintf('Unknown country %s', $code));
}
return (new Address())
->setCountry($country)
->setCity($data->getRequiredString('city'))
->setStreetData(
$this->addressBuilder->parseFromText($data->getRequiredString('full_address'))
)
;
}
}
$provider = new GroupedNormalizerRegistryProvider();
$provider->addTypeAwareNormalizer(new ContactDetailsNormalizer());
$provider->addTypeAwareNormalizer(new AddressNormalizer(/* ... */));
$coreDenormalizer = new CoreDenormalizer($provider);
$coreNormalizer = new CoreNormalizer($provider, new TypeGuesser(), new DataFilter());
// must be stdClass, not array
$data = json_decode('{
"email":"[email protected]",
"residence_address":{"country_code":"LT","city":"Vilnius","full_address":"Park street 182b-12"},
"shipping_addresses":[]
}');
$contactDetails = $coreDenormalizer->denormalize($data, ContactDetails::class);
$normalized = $coreNormalizer->normalize($contactDetails);
var_dump($normalized);
// object(stdClass)#1 (3) { ...
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.