symfony形成+ fos休息

时间:2013-10-23 23:00:35

标签: rest symfony symfony-forms fosrestbundle

我有一个unidirectional many-to-one关系中的两个实体类和两个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}}}

我得到的错误是"类别":{"错误":["此值无效。"]}}

最后,我发现发送

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

实际上有效。但它有点烦人,因为当我使用GET获取主题时,我得到了

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

而不是

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

所以在使用PUT进行更新之前,我必须使用其ID ...

覆盖category属性

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

2 个答案:

答案 0 :(得分:0)

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

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

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

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

答案 1 :(得分:0)

刚刚在官方报告中发布了一个问题:https://github.com/FriendsOfSymfony/FOSRestBundle/issues/984

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