How to Create your Custom Encoder

The Serializer Component uses Normalizers to transform any data to an array. Then, by leveraging Encoders, that data can be converted into any data-structure (e.g. JSON).

シリアライザ コンポーネントは、ノーマライザを使用してデータを配列に変換します。次に、エンコーダーを活用することで、そのデータを任意のデータ構造 (JSON など) に変換できます。

The Component provides several built-in encoders that are described in the serializer component but you may want to use another structure that's not supported.

コンポーネントは、シリアライザー コンポーネントで説明されているいくつかの組み込みエンコーダーを提供しますが、サポートされていない別の構造を使用することもできます。

Creating a new encoder

Imagine you want to serialize and deserialize YAML. For that you'll have to create your own encoder that uses the Yaml Component:

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;
    }
}

Registering it in your app

If you use the Symfony Framework. then you probably want to register this encoder as a service in your app. If you're using the default services.yaml configuration, that's done automatically!

Symfony フレームワークを使用している場合。次に、このエンコーダーをアプリのサービスとして登録することをお勧めします。デフォルトの services.yaml 構成を使用している場合、これは自動的に行われます。

Tip

ヒント

If you're not using autoconfigure, make sure to register your class as a service and tag it with serializer.encoder.

自動構成を使用していない場合は、必ずクラスをサービスとして登録し、serializer.encoder でタグ付けしてください。

Now you'll be able to serialize and deserialize YAML!

これで、YAML をシリアライズおよびデシリアライズできるようになります。