Rest symfony表格+;fos休息

Rest symfony表格+;fos休息,rest,symfony,symfony-forms,fosrestbundle,Rest,Symfony,Symfony Forms,Fosrestbundle,我在一个关系中有两个实体类和两个fos rest控制器,它们负责使用各自的表单类型(如所述)创建、获取、更新和删除每个实体类 在关系(主题)的“多”侧创建新实体时,我希望将其与“一”侧(类别)的现有实体链接。主题的形式类型如下所示: public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('category', 'entity', array(

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

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

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('category', 'entity', array('class' => 'MyNiceBundle:Category', 'property' => 'id'))
    ;
}
但它不接受我对表格的post请求

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

我得到的错误是“category”:{“errors”:[“此值无效。”]}

最后,我发现

{"my_form":{"category":2}}
实际上起了作用。但这有点烦人,因为当我使用GET获取主题时,我会

{"id":1, "category":{"id":2, "aProperty":"bla"}}
而不是

{"id":1, "category":2}
因此,在使用PUT进行更新之前,我必须用其ID覆盖category属性


我相信有更好的办法。有什么建议吗?

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

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


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

刚刚在官方回购协议上发行了一个债券:


一旦提出合适的解决方案,我将扩展这个答案。

好吧,我想在这种情况下,我必须在调用$form->bind($this->getRequest())之前篡改$\u POST数据。问题是绑定在{“my_form”:{“category”:{“id”:2}}上无法正常工作。我想知道是否有更优雅的方式。是的,编码您自己的EntityToID转换器,对不起,我的意思是与{“我的表单”:{“类别”:2}兼容,我已经更新了我的答案,但我需要的是EntityToArray转换器,而不是EntityToID转换器。由于没有字段类型“Array”,我不知道如何解决这个问题。{“id”:2,“aProperty”:“bla”}类别对象
{"my_form":{"category":2}}
{"my_form":{"category":{"id":2, "aProperty":"bla"}}}