2016-09-23 29 views
2

如何在控制器級別爲FOSRestBundle使用的串行器指定元數據目錄?FOSRESTBundle:如何在控制器級別更改串行器元數據塊

我不能在config.yml中設置它,因爲在我的情況下,它取決於請求的路線。

我見過JMSSerializer doc,我可以使用下面的代碼

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

但如何將其應用到已實例化串行器(或如何取代它)?

回答

1

恐怕這是不可能的。

調用build() in SerializerBuilder.php時,目錄設置爲元數據驅動程序。

即使you can access the metadata factory使用Serializer它可能不會幫助你,因爲工廠與緩存目錄無關。只有司機使用目錄。

所以你唯一的選擇可能是創建一個新的實例Serializer並使用它來代替DI中的一個。

編輯:創建新的Serializer的工作方式與您的問題相同。然後,您的DI容器應該是Container的實例,其方法爲set(),它允許您覆蓋任何註冊的服務。

+0

感謝您的回答。你可以添加你的答案,我可以*創建一個新的Serializer實例,並使用它來代替DI中的那個實例與FOSRestBundle? – marcv

+0

我更新了我的答案。 – martin

+0

好的,我仍然沒有看到我可以如何將它應用到FOSRestBundle,但我會接受你的答案。謝謝。 – marcv