3

我有两个单向多对一关系中的实体类和两个 fos rest 控制器,它们使用自己的表单类型(如here所述)负责创建、获取、更新和删除它们中的每一个。

在关系(主题)的“多”侧创建新实体时,我想将其与“一”侧(类别)的现有实体链接。Topic 的表单类型如下所示:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('category', 'entity', array('class' => 'MyNiceBundle:Category', 'property' => 'id'))
    ;
}

但它不接受我的表单请求

{"my_form":{"category":{"id":2, "aProperty":"bla"}}}

或者

{"my_form":{"category":{"id":2}}}

我得到的错误是 "category":{"errors":["This value is not valid."]}}

最后,我发现发送

{"my_form":{"category":2}}

实际工作。但这有点烦人,因为当我使用 GET 获取主题时,我得到

{"id":1, "category":{"id":2, "aProperty":"bla"}}

并不是

{"id":1, "category":2}

所以在使用 PUT 进行更新之前,我必须用它的 ID 覆盖类别属性......

我确信有更好的方法来做到这一点。有什么建议吗?

4

2 回答 2

0

刚刚在官方仓库打开了一个问题:https ://github.com/FriendsOfSymfony/FOSRestBundle/issues/984

一旦提出适当的解决方案,将立即扩展此答案。

于 2015-03-02T19:46:19.460 回答
0

我将更改其余服务器端的 PUT 控制器以使其与两种方法兼容:

{"my_form":{"category":2}}

{"my_form":{"category":{"id":2, "aProperty":"bla"}}}

如果你这样做,你就不必担心类别对象,一切都将由 put 控制器完成,注入表单数据,在调用 isValid() 方法之前为 formType 和 Voilà 正确的语法!至少,我会这样做。

于 2013-10-24T09:49:27.423 回答