自己的 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
添加到解决问题的序列化程序服务定义中。
我正在使用 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
添加到解决问题的序列化程序服务定义中。