Как создать ваш пользовательский кодировщик
Дата обновления перевода 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!