Як створити ваш користувацький кодувальник

Дата оновлення перекладу 2022-11-25

Як створити ваш користувацький кодувальник

Компонент Серіалізатор використовує нормалізатори, щоб перетворювати будь-які дані на масив. Потім, використовуючи кодувальники, ці дані можуть бути перетворені на будь-яку структуру даних (наприклад, 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
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 = [])
    {
        return Yaml::dump($data);
    }

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

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

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

Реєстрація у вашому додатку

Якщо ви використовуєте фреймворк Symfony, то ви скоріш за все захочете зареєструвати цей кодувальник у вашому додатку в якості сервісу. Якщо ви використовуєте конфігурацію services.yml за замовчуванням , то це робиться автоматично!

Tip

Якщо ви не використовуєте автоконфігурацію, переконайтеся в тому, що ви зареєстрували ваш клас як сервіс та тегували його за допомогою serializer.encoder.

Тепер ви маєте можливіть серіалізувати та десеріалізувати Yaml!