Как создать ваш пользовательский кодировщик

Компонент сериализатор использует нормализаторы, чтобы трансформировать любые данные в массив. Потом, используя кодировшики, эти данные могут быть конвертированы в любую структуру данных (например, JSON).

Этот компонент предоставляет несколько встроенных кодировщиков, которые описаны в разделе о них, но вы можете захотеть использовать другую структуру, которая не поддерживается.

Создание нового кодировщика

Представьте, что вы хотите сериализировать и десериализировать Yaml. Для этого вам нужно будет создать ваш собственный кодировщик, который использует Компонент Yaml:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
namespace AppBundle\Serializer;

use Symfony\Component\Serializer\Encoder\DecoderInterface;
use Symfony\Component\Serializer\Encoder\EncoderInterface;
use Symfony\Component\Yaml\Yaml;

class YamlEncoder implements EncoderInterface, DecoderInterface
{
    public function encode($data, $format, array $context = array())
    {
        return Yaml::dump($data);
    }

    public function supportsEncoding($format)
    {
        return 'yaml' === $format;
    }

    public function decode($data, $format, array $context = array())
    {
        return Yaml::parse($data);
    }

    public function supportsDecoding($format)
    {
        return 'yaml' === $format;
    }
}

Регистрация в вашем приложении

Если вы используете фреймворк Symfony, то вы скорее всего захотите зарегистрировать этот кодировщик в вашем приложении в качестве сервиса. Если вы используете конфигурацию services.yml по умолчанию, то это делается автоматически!

Tip

Если вы не используете автоконфигурацию, убедитесь в том, что вы зарегистрировали ваш класс как сервис и тегировали его с помощью serializer.encoder.

Теперь вы имеете возможность сериализировать и десериализировать Yaml!

Эта документация является переводом официальной документации Symfony и предоставляется по свободной лицензии CC BY-SA 3.0.