【问题标题】:symfony serializer jmsserializerbundle service name conflictsymfony 序列化程序 jmsserializerbundle 服务名称冲突
【发布时间】:2020-07-13 22:35:23
【问题描述】:

我有以下问题:我正在开发一个依赖于 jmsserializerbundle (1.1) 的 symfony (2.8) 项目。 在 jms-serializer 包旁边启用 symfony-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:
        #...

【问题讨论】:

  • 如果您使用的是 JMSSerializerBundle 1.1 版,您似乎可以使用选项` jms_serializer: enable_short_alias: false 你可以试试这个吗?
  • @Jeroen 太棒了,这似乎已经解决了。现在我只希望现有的代码库不使用短别名:) 谢谢,现在我可以继续我的项目了。你对我的第二个问题有什么意见吗?仅供参考。
  • 我愿意,看看我的答案!

标签: symfony jmsserializerbundle jms-serializer


【解决方案1】:

有没有办法在不更新 jmsserializerbundle 到 2.0 的情况下解决这个问题?

JMS Serializer 提供了选项:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-06
    • 1970-01-01
    • 2023-04-01
    相关资源
    最近更新 更多