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

监护人

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

案件:

我有一个产品实体和一个评论实体。在 UI 中呈现产品时,我在下方包含了一个表单,访问者可以使用该表单来撰写有关该产品的简短评论。

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

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

在谷歌搜索时,我发现 symfony 文档在这里谈到了数据转换器(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

最后,我发现甚至有一个 repo 似乎在这里提供了自己的解决方案:https : //github.com/Gregwar/FormBundle

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

提前谢谢了。

诱饵

我会尽量让这对你来说很容易。假设您有一个控制器,并且您使用的方法称为“视图”。您要做的是将表单提交给控制器中的不同方法,我们称之为“评论”。因此,对于数据转换,您可以像这样声明注释方法:

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

所以你的表单的动作需要是评论方法并传递产品的id。通过修改表单属性并将操作设置为评论路径并将产品的 id 传递到路径来完成此操作。Symfony 将能够使用我向您展示的路线对您的 Product 实体进行类型提示,并根据作为您方法参数的 Product 类型进行翻译。确保在产品实体的控制器顶部包含正确的“使用”语句。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章