/uuid-normalizer

Normalizer to serialize Ramsey Uuid with Symfony Serializer

Primary LanguagePHPDo What The F*ck You Want To Public LicenseWTFPL

Uuid normalizer

Build Status codecov Scrutinizer Code Quality Dependency Status

Latest Stable Version Total Downloads Latest Unstable Version License

Normalizer to serialize Ramsey Uuid using Symfony Serializer.

Installation

With Composer

composer require gbprod/uuid-normalizer

Why

By default, Symfony Serializer can't handle serialization and deserialization of Ramsey Uuid. You will have that kind of errors:

Not a time-based UUID
500 Internal Server Error - UnsupportedOperationException

Setup

In your app/config/service.yml file:

services:
    uuid_normalizer:
        class: GBProd\UuidNormalizer\UuidNormalizer
        tags:
            - { name: serializer.normalizer }

    uuid_denormalizer:
        class: GBProd\UuidNormalizer\UuidDenormalizer
        tags:
            - { name: serializer.normalizer }

Or using xml:

<services>
    <service id="uuid_normalizer" class="GBProd\UuidNormalizer\UuidNormalizer">
        <tag name="serializer.normalizer" />
    </service>
    <service id="uuid_denormalizer" class="GBProd\UuidNormalizer\UuidDenormalizer">
        <tag name="serializer.normalizer" />
    </service>
</services>

Or php:

use Symfony\Component\DependencyInjection\Definition;

$definition = new Definition('GBProd\UuidNormalizer\UuidNormalizer');
$definition->addTag('serializer.normalizer');
$container->setDefinition('uuid_normalizer', $definition);

$definition = new Definition('GBProd\UuidNormalizer\UuidDenormalizer');
$definition->addTag('serializer.normalizer');
$container->setDefinition('uuid_denormalizer', $definition);

Or building your own serializer:

use GBProd\UuidNormalizer\UuidDenormalizer;
use GBProd\UuidNormalizer\UuidNormalizer;

$serializer = new Serializer([
    new UuidNormalizer(),
    new UuidDenormalizer(),
    // Other normalizers...
]);

Requirements

  • PHP 5.6+

Contributing

Feel free to contribute, see CONTRIBUTING.md file for more informations.