Конфликт имени службы сериализатора symfony jmsserializerbundle

У меня следующая проблема: я работаю над проектом symfony (2.8), который зависит от jmsserializerbundle (1.1). При включении symfony-serializer вместе с пакетом jms-serializer,

# app/config/config.yml
framework:
    # ...
    serializer: { enabled: true }

jms_serializer:
    metadata:
        #...

при вызове $this->get('serializer') или $this->get('jms_serializer') я получаю только jms-serializer. Похоже, эта проблема была решена в jmsserializerbundle версии 2.0: https://github.com/schmittjoh/JMSSerializerBundle/issues/558

Есть ли способ решить эту проблему без обновления jmsserializerbundle до 2.0?

Будет ли какая-либо разница в производительности по сравнению с обычной конфигурацией symfony-serializer, если symfony-serializer будет включен в пользовательский сервис? вот так:

<?php

use SomeCustomNormalizer;
use Symfony\Component\Serializer\Encoder\JsonEncode;
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
use Symfony\Component\Serializer\Serializer;
use Symfony\Component\Serializer\SerializerInterface;

class SerializerService implements SerializerInterface
{

    private $serializer;

    public function __construct()
    {
        $this->serializer = new Serializer(
            [new SomeCustomNormalizer(), new ObjectNormalizer()],
            [new JsonEncode()]
        );
    }

    public function serialize($data, $format, array $context = array())
    {
        # serialize
    }

    public function deserialize($data, $type, $format, array $context = array())
    {
        # deserialize
    }
}
# SomeBundle/Resources/config/services.yml
serializer_service:
      class: SomeBundle\SerializerService

У меня возник вопрос относительно производительности, потому что существующая конфигурация jms регистрирует jmsserializerbundle в ядре приложения, что не относится к моей пользовательской службе, которая только что настроена в services.yml.

заранее спасибо

Решение

Как описано ниже, мне просто нужно было добавить одну строку в jms-config:

# app/config/config.yml
jms_serializer:
    enable_short_alias: false
    metadata:
        #...

person Andy    schedule 13.07.2020    source источник
comment
Если вы используете версию 1.1 JMSSerializerBundle, кажется, что вы можете использовать опцию ` jms_serializer: enable_short_alias: false Можете ли вы попробовать это?   -  person Jeroen    schedule 13.07.2020
comment
@Jeroen Круто, кажется, это исправлено. Теперь я просто надеюсь, что существующая кодовая база не использует короткий псевдоним :) Спасибо, теперь я могу продолжить свой проект. Есть ли у вас какие-либо комментарии относительно моего второго вопроса? просто для дальнейшего использования.   -  person Andy    schedule 13.07.2020
comment
Да, смотрите мой ответ!   -  person Jeroen    schedule 13.07.2020


Ответы (1)


Есть ли способ решить эту проблему без обновления jmsserializerbundle до 2.0?

Сериализатор JMS предоставляет возможность:

jms_serializer:
    enable_short_alias: false

Будет ли разница в производительности по сравнению с обычной конфигурацией symfony-serializer при включении Symfony-serializer в пользовательский сервис? вот так:

Думаю, нет, сериализатор Symfony — это просто «еще одна» служба, определенная FrameworkBundle, обертка класса Serializer с внедренными нормализаторами и кодировщиками.

Если вы создадите свой собственный сервис (как в вашем примере), он также будет скомпилирован контейнером сервиса. Вы можете проверить определение здесь: https://github.com/symfony/symfony/blob/v2.8.52/src/Symfony/Bundle/FrameworkBundle/Resources/config/serializer.xml

person Jeroen    schedule 13.07.2020