2014-07-07 25 views
0

我使用Symfony2作为JS前端应用程序的Rest API。我遇到了一个场景,我希望用户“邀请”(=添加)用户到一个组。但我只想让他们将用户添加到现有的关系中,而不是“覆盖”整个关系,这是与常规Symfony2表单结合的标准行为。Symfony2 Form Rest只添加到关系

实现此行为的最佳实践是什么?

附加注释:

我在前台和我的前端使用灰烬,数据可能会发送与整个集团,包括其他用户PUT请求(但不是全部)。

我的JSON有效载荷将是这个样子:

{ 
    "usergroup": { 
     "name":"yxcv2", 
     "stake":"sdfghj", 
     "imageName":null, 
     "userCount":5, 
     "users":[ 
      5, 
      6, 
      7 
      ], 
     "gameGroup":"13", 
    } 
} 

在这种情况下用户1,2,3和4已经是组的成员。而不是用5,6,7替换1,2,3,4,我想将5,6,7添加到已有的成员中。

+0

你能解释一下“与整个集团,包括其他用户发送PUT请求(**但不是所有的**)”,请 ? – nifr

回答

0

一个LINK请求应该被用来将项目添加到现有的集合,而不是一个POST要求覆盖它。

使用symfony的形式,你会发布User(ID),加上一个隐藏字段_method与价值LINK喜欢的东西/groups/{id}

路由会是这样的:

group_invite: 
    path:  /groups/{id} 
    defaults: { _controller: YourBundle:Group:inviteUser } 
    methods: [LINK] 

你可以使用FOSRestBundle的implicit resource name definition了。

要使方法覆盖工作,需要将配置设置framework.http_method_override设置为true(=默认值 - 自从symfony版本2.3开始可用)。

更多信息可以在文档章节中找到:

How to use HTTP Methods beyond GET and POST in Routes

+0

从简单的“REST”角度来看,这是有意义的,我在前端使用Ember-Data,它可能会对现有实体的“更新”做出“PUT”请求。 – m0c