2012-12-02 47 views
1

我正在使用Symfony2和JMSSerializerBundle構建API。 JMSSerializer提供的用於設置不同方式使用組序列化對象的系統非常有用,但是,我缺少一種方法來指定要在每個參數中序列化哪個組。示例:JMSSerializerBundle:按屬性指定組

我有一篇與用戶(作者)有關的文章。文章和用戶可以被序列化爲「列表」或「細節」,但是,我希望用戶被序列化爲「列表」,並始終從文章中檢索它們(因爲「細節」組保留用於使用獲取用戶和用戶)。問題是,如果我將序列化程序設置爲「細節」,那麼作者也會被序列化爲「細節」。

在我的印象中,代碼應該是這樣的:

/** 
* @var SCA\APIBundle\Entity\User 
* @Groups({"list" => "list", "details" => "list"}) 
*/ 
private $author; 

其中數組的鍵表示家長應被序列化的方式,和值表示的孩子應該被序列化的方式。

任何線索我該如何做到這一點?

回答

0

它不應該在組成對象上完成,而應該在組合上完成。

在你的情況,我想你有類似的東西:

class Article 
{ 
    /** 
    * @var User 
    * @Groups({"list", "details"}) 
    */ 
    private $author; 
} 


class User 
{ 
    private $firstName; 
    private $lastName; 
} 

所以,如果你想揭露firstName屬性序列化組成的對象時,你需要在用戶對象定義同一組。

它變成:

class Article 
{ 
    /** 
    * @var User 
    * @Groups({"list", "details"}) 
    */ 
    private $author; 
} 


class User 
{ 
    /* 
    * @Groups({"list"}) 
    */ 
    private $firstName; 
    private $lastName; 
} 

如果您需要更多的控制,你可以定義更明確的羣體,如「文章列表」,「用戶姓名」,「用戶列表最小的」,等等。

由您來決定採用的最佳策略。

+0

是的,這就是我要使用的解決方案,但我認爲應該有其他方法來完成這個任務,因爲如果您有大量類,這種方法有點難以維護。 –

+0

@aperezroca,我同意這可能有點反直觀,但我想這是由於排斥策略如何工作(反思)的一些限制, –