2017-05-08 205 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