我在unidirectional many-to-one关系中有两个实体类,还有两个fos rest控制器,它们使用各自的表单类型(如here所述)负责创建,获取,更新和删除它们。

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

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属性...

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

最佳答案

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

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




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


如果这样做的话,您将不必担心类别对象,一切都将由put控制器完成,注入表单数据,然后再为isTypeType和Voilà调用正确的isValid()方法!至少我会这样做。

关于rest - symfony形式+ fos休息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19553884/

10-10 00:10