Как настроить сериализатор в Symfony?

Как настроить сериализатор Symfony через конфигурацию DI контейнера в YAML файле для улучшения структуры кода?
  • 20 февраля 2024 г. 22:18
Ответы на вопрос 2
Для начала необходимо установить бандл JMS Serializer Bundle, если он еще не установлен:

```bash
composer require jms/serializer-bundle
```

Затем откройте файл `config/packages/jms_serializer.yaml` и добавьте следующую конфигурацию:

```yaml
jms_serializer:
    metadata:
        auto_detection: true
        directories:
            App:
                namespace_prefix: "App"
                path: "%kernel.project_dir%/src/Entity"
```

Этот фрагмент конфигурации указывает сериализатору на автоматическое обнаружение метаданных сущностей в директории `src/Entity` вашего проекта.

Теперь вы можете использовать сериализатор в своих контроллерах или сервисах. Например, в контроллере:

```php
use JMS\Serializer\SerializerInterface;
use Symfony\Component\HttpFoundation\Response;

class MyController extends AbstractController
{
    public function serializeData(SerializerInterface $serializer)
    {
        $data = ['foo' => 'bar'];
        
        $serializedData = $serializer->serialize($data, 'json');
        
        return new Response($serializedData);
    }
}
```

Теперь сериализатор настроен и готов к использованию в вашем проекте.
Походу сам ответил на свой вопрос, хотя до того как опубликовал часа 2 сидел пытался понять в чем проблема. Нужно типа в конфиге определять как именно сервисы те классы, к которым ты будешь обращаться по ссылке 

Symfony\Component\Serializer\Normalizer\BackedEnumNormalizer:
        class: Symfony\Component\Serializer\Normalizer\BackedEnumNormalizer

    Symfony\Component\Serializer\Normalizer\ArrayDenormalizer:
        class: Symfony\Component\Serializer\Normalizer\ArrayDenormalizer

    Symfony\Component\Serializer\Encoder\JsonEncoder:
        class: Symfony\Component\Serializer\Encoder\JsonEncoder


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