FOSRESTBundle:如何在控制器级别更改序列化程序元数据目录

FOSRESTBundle: how to alter serializer metadatadirs at controller level

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

我无法在 config.yml 中设置它,因为在我的情况下它取决于请求的路由。

我在 JMSSerializer doc 中看到我可以使用以下代码

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

但是如何将它应用到已经实例化的序列化器(或如何替换它)?

恐怕这不可能。

目录在调用 build() in SerializerBuilder.php 时设置为元数据驱动程序。

即使 you can access the metadata factorySerializer 使用,它也可能对您没有帮助,因为工厂与缓存目录无关。只有驱动程序才能使用目录。

因此,您唯一的选择可能是创建 Serializer 的新实例并使用它来代替来自 DI 的实例。

编辑:创建新的 Serializer 的工作方式与您的问题相同。那么你的 DI 容器应该是 Container 的一个实例,它有方法 set() 可以让你覆盖任何注册的服务。