symfony конфликт имени службы jmsserializerbundle сериализатора - PullRequest
0 голосов
/ 13 июля 2020

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

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

jms_serializer:
    metadata:
        #...

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

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

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

<?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:
        #...

1 Ответ

1 голос
/ 13 июля 2020

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

JMS Serializer предоставляет вариант:

jms_serializer:
    enable_short_alias: false

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

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

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

...