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

时间:2016-09-23 15:20:24

标签: serialization symfony fosrestbundle jmsserializerbundle

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

我担心这是不可能的。

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

尽管Serializer使用you can access the metadata factory它可能不会帮助你,因为工厂与缓存目录无关。只有驱动程序才能使用目录。

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

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