rest - symfony 形式 + fos 休息

标签 rest symfony symfony-forms fosrestbundle

我在 unidirectional many-to-one 中有两个实体类关系和两个 fos rest Controller ,负责创建、获取、更新和删除它们中的每一个,使用它们自己的表单类型(如 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 覆盖类别属性...

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

最佳答案

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

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

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

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

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

相关文章:

java.lang.NoSuchMethodException : Unknown property 'language' on class 'class java.lang.Class'

c# - 缺少基于任务的 WCF 服务的帮助说明

httprequest - Symfony kernel.controller事件发送响应

node.js - 使用nodejs访问rest api

java - 使用 Jersey 获取 REST 资源作为 List<T>

php - 调用不同存储库中的存储库 symfony2

php - Symfony2 创建左连接

php - 向 Symfony 3 所有表单类型添加帮助选项

php - 在 Symfony2 中创建组合的客户端和服务器端验证

php - 仅在自定义验证器字段上需要 Symfony 表单