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

Дата обновления перевода 2024-07-27

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

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

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

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

Представьте, что вы хотите сериализировать и десериализировать 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
29
// src/Serializer/YamlEncoder.php
namespace App\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, string $format, array $context = []): string
    {
        return Yaml::dump($data);
    }

    public function supportsEncoding(string $format, array $context = []): bool
    {
        return 'yaml' === $format;
    }

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

    public function supportsDecoding(string $format, array $context = []): bool
    {
        return 'yaml' === $format;
    }
}

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

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

Tip

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

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