2017-05-08 206 views
0

我正在使用Symfony 3,FosRestBundle和JsmSerializerBundle。SF3 - 使用JmsSerializer添加實體名稱

我想在我的json響應中添加實體名稱。

例:

{ 
    'user': 
    { 
     'id': 0 
     'firstName': 'John', 
     'lastName': 'Doe', 
     'posts': [ 
     { 
      'id': 0, 
      'name': 'post name #1' 
     }, 
     { 
      'id': 1, 
      'name': 'post name #2' 
     }, 
     ] 
    } 
} 

其中 '用戶' 是一個實體的用戶,併發佈一個實體後。

構建我的json的最佳方式是什麼?

回答

0

首先你的json是無效的'帖子'可以是對象{}而不是數組[],並且不允許重複鍵'帖子'。

爲了獲得每個實體的類型可以在每個實體中添加一個屬性。

/** 
* @var string 
* @Serializer\Expose() 
*/ 
private $entityType = 'user'; 

...和你的JSON看起來像:

{ 
    "id": 0, 
    "entityType": "user", 
    "firstName": "John", 
    "lastName": "Doe", 
    "posts": [ 
    { 
     "id": 0, 
     "entityType": "post", 
     "name": "post name #1" 
    }, 
    { 
     "id": 1, 
     "entityType": "post", 
     "name": "post name #2" 
    } 
    ] 
} 

EDIT1:創建一個響應對象來包裝實體

class GetUserResponse 
{ 
    /** 
    * @var User 
    * @Serializer\Expose() 
    * @Serializer\SerializedName(name="user") 
    */ 
    protected $user; 
} 

應該返回

{ 
    'user': 
    //.... 
} 
+0

我有編輯我的JSON以更正帖子/帖子。 entityType可能是一個解決方案。我更喜歡在實體數據之外擁有entityType。那可能嗎 ?也許用Normalizer? – Sancho

+0

通過這種修改,您需要的僅僅是用戶類型,因爲其他(帖子)根據屬性獲取名稱,在這種情況下,您可以在發送給使用者之前簡單地包裝返回,請參閱上述響應中的@ edit1 – rafrsr