Serialization FOSRESTBundle:如何在控制器级别更改序列化程序MetadataDir

Serialization FOSRESTBundle:如何在控制器级别更改序列化程序MetadataDir,serialization,symfony,fosrestbundle,jmsserializerbundle,Serialization,Symfony,Fosrestbundle,Jmsserializerbundle,如何在控制器级别为FOSRestBundle使用的序列化程序指定元数据目录 我不能在config.yml中设置它,因为在我的例子中,它取决于请求的路由 我已经看到,我可以使用以下代码 $serializer = JMS\Serializer\SerializerBuilder::create() ->addMetadataDir($someDir) ->build(); 但是,如何将其应用于已实例化的序列化程序(或如何替换它)?恐怕这是不可能的 调用时将目录设置为元

如何在控制器级别为FOSRestBundle使用的序列化程序指定元数据目录

我不能在
config.yml
中设置它,因为在我的例子中,它取决于请求的路由

我已经看到,我可以使用以下代码

$serializer = JMS\Serializer\SerializerBuilder::create()
    ->addMetadataDir($someDir)
    ->build();

但是,如何将其应用于已实例化的序列化程序(或如何替换它)?

恐怕这是不可能的

调用时将目录设置为元数据驱动程序

即使由
序列化程序使用,它也可能不会帮助您,因为工厂与缓存目录无关。只有驱动程序才能使用目录

因此,您唯一的选择可能是创建一个新的
Serializer
实例,并使用该实例而不是来自DI的实例


编辑:创建新的
序列化程序
的工作方式与问题中的工作方式相同。然后,您的DI容器应该是具有方法
set()
的实例,该方法允许您覆盖任何已注册的服务

谢谢你的回答。你能补充一下我如何用FOSRestBundle“创建一个新的序列化程序实例并使用它而不是来自DI的实例”吗?好的,我仍然不知道如何将此应用于FOSRestBundle,但我还是会接受你的回答。谢谢