Documentação do Symfony - versão 3.1
Renderizada do repositório symfony-docs-pt-BR no Github

Como usar o Componente Serializer

Serializar e desserializar de e para objetos e em formatos diferentes (por exemplo, JSON ou XML) é um tema muito complexo. O Symfony vem com um Componente Serializer, que lhe fornece algumas ferramentas que você pode aproveitar para sua solução.

Na verdade, antes de começar, familiarize-se com o serializer, normalizadores e codificadores (encoders) lendo Componente Serializer. Você também deve verificar o JMSSerializerBundle, que expande as funcionalidades oferecidas pelo serializer do núcleo do Symfony.

Ativando o Serializer

New in version 2.3: O Serializer sempre existiu no Symfony, mas antes do Symfony 2.3, você mesmo precisava construir o serviço serializer.

O serviço serializer não está disponível por padrão. Para ativá-lo, habilite-o em sua configuração:

  • YAML
    1
    2
    3
    4
    5
    # app/config/config.yml
    framework:
        # ...
        serializer:
            enabled: true
    
  • XML
    1
    2
    3
    4
    5
    <!-- app/config/config.xml -->
    <framework:config>
        <!-- ... -->
        <framework:serializer enabled="true" />
    </framework:config>
    
  • PHP
    1
    2
    3
    4
    5
    6
    7
    // app/config/config.php
    $container->loadFromExtension('framework', array(
        // ...
        'serializer' => array(
            'enabled' => true
        ),
    ));
    

Adicionando Normalizadores e Codificadores (Encoders)

Uma vez ativado, o serviço serializer estará disponível no container e será carregado com dois encoders (JsonEncoder e XmlEncoder) mas não normalizers, ou seja, você precisará carregar o seu próprio.

Você pode carregar normalizadores e/ou codificadores adicionando tags a eles como serializer.normalizer e serializer.encoder. Também é possível definir a prioridade da tag, a fim de decidir a ordem de correspondência.

Aqui está um exemplo de como carregar o GetSetMethodNormalizer:

  • YAML
    1
    2
    3
    4
    5
    6
    # app/config/services.yml
    services:
        get_set_method_normalizer:
        class: Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer
            tags:
                - { name: serializer.normalizer }
    
  • XML
    1
    2
    3
    4
    5
    6
    <!-- app/config/services.xml -->
    <services>
        <service id="get_set_method_normalizer" class="Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer">
            <tag name="serializer.normalizer" />
        </service>
    </services>
    
  • PHP
    1
    2
    3
    4
    5
    6
    7
    8
    // app/config/services.php
    use Symfony\Component\DependencyInjection\Definition;
    
    $definition = new Definition(
        'Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer'
    ));
    $definition->addTag('serializer.normalizer');
    $container->setDefinition('get_set_method_normalizer', $definition);
    

Aprendendo mais sobre o Serializer

ApiPlatform fornece um sistema de API com suporte aos formatos hypermedia JSON-LD e Hydra Core Vocabulary. Ele é construído com o Framework Symfony e seu componente Serializer. Ele fornece normalizadores personalizados e um encoder personalizado, metadata personalizados e um sistema de cache.

Se você deseja aproveitar todo o poder do componente Serializer do Symfony, verifique como esse bundle funciona.