自己的 Symfony 序列化器被添加为默认编码器

Own Symfony serializer gets added as encoder to default one

我正在使用 Symfony 6.0.7 并注意到此行为:

当我将自定义序列化程序注册为服务时,它会作为编码器添加到默认的“@serializer”序列化程序中。

为什么会这样,我该如何改变这种行为?

我的问题是,这会扰乱 FOSRestBundle 的错误处理,即使调试设置为 false,它现在也总是输出异常的堆栈跟踪。

我的services.yaml

foo.serializer:
  class: Symfony\Component\Serializer\Serializer
  ...
  ...

这是我转储“@serializer”服务的编码器时得到的结果:

...
array (size=5)
  0 => 
    object(Symfony\Component\Serializer\Serializer)[308]  <== @foo.serializer instance
      protected 'encoder' => 
        object(Symfony\Component\Serializer\Encoder\ChainEncoder)[332]
          private array 'encoders' => 
            array (size=1)
              ...
          private array 'encoderByFormat' => 
            array (size=0)
...

我找到了发生这种情况的原因:

Serializer 实现 ContextAwareEncoderInterface 扩展 EncoderInterface

由于所有编码器都将通过自动配置标记为 serializer.encoder,因此序列化程序本身将被注册为编码器。

我将 autoconfigure: false 添加到解决问题的序列化程序服务定义中。