Symfony 3将实体A与实体B相关联

时间:2017-03-25 22:53:33

标签: php symfony symfony-forms

我想弄清楚,我认为这是一个非常常见的用例,但却无法找到正确的指针。

案例:

我有产品实体和审核实体。 在UI中呈现产品时,我在下面添加了一个表单,访问者可以使用该表单撰写关于该产品的小评论。

显然,在提交评论时,我需要产品(对象或ID),以便我可以将评论与其编写的产品相关联。

我的第一个想法是在表单中使用隐藏的输入字段。 Symfony(3)抛出一个错误,它期望一个完全水合的产品实体,而不仅仅是一个Id。

当谷歌搜索时,我发现symfony docs在这里谈论数据变形金刚(http://symfony.com/doc/current/form/data_transformers.html)。 对于手头这么简单的任务,恕我直言感觉就像是一个巨大的过度杀伤。

继续我的搜索,似乎我并不孤单,因为显然很多问题已经在symfony本身的github回购中提交:

https://github.com/symfony/symfony/issues/8293

https://github.com/symfony/symfony/issues/6602

https://github.com/symfony/symfony/pull/15053

最后甚至还有一个我发现的回购协议似乎在这里提供了一个解决方案: https://github.com/Gregwar/FormBundle

在接受这个最后一个回复的依赖关系之前,我想在这里查看是否有人可以建议他们过去是否(以及如何)解决了这个问题。

非常感谢提前。

1 个答案:

答案 0 :(得分:0)

我会尽量让你这么容易。我们假设您有一个控制器,您正在使用的方法称为" view"。你想要做的是让表单在你的控制器中提交给不同的方法,让我们称之为"评论"。因此,对于数据转换,您可以像这样声明注释方法:

/**
* @Route( "/comment/{id}", name="product_comment" )
*/
public function commentAction( Request $request, Product $product )
{
    ....other code goes here.
}

因此,您的表单的操作需要是注释方法并传递产品的ID。通过修改表单属性并将操作设置为注释路径并将产品的ID传递到路径来执行此操作。 Symfony将能够使用我向您展示的路径键入提示您的Product实体,并根据作为您方法的参数的Product类型进行翻译。确保包含正确的"使用"在您的产品实体的控制器顶部的声明。