Symfony 3 关联实体 A 和实体 B
Symfony 3 Associate Entity A with Entity B
我想弄清楚,我认为这是一个非常常见的用例,但找不到正确的指针。
案例:
我有一个 product 实体和一个 review 实体。
在 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 的依赖项之前,我想在这里查看是否有人可以建议他们过去是否(以及如何)解决了这个问题。
非常感谢。
我会尽力让您轻松完成。假设您有一个控制器并且您正在使用的方法称为 "view"。您要做的是将表单提交给控制器中的另一个方法,我们称之为 "comment"。因此,对于数据转换,您可以像这样声明注释方法:
/**
* @Route( "/comment/{id}", name="product_comment" )
*/
public function commentAction( Request $request, Product $product )
{
....other code goes here.
}
因此您的表单的操作需要指向评论方法并传递产品的 ID。通过修改您的表单属性并将操作设置为评论路径并将产品的 id 传递到路径来执行此操作。 Symfony 将能够使用我向您展示的路线对您的 Product 实体进行类型提示,并根据作为您的方法参数的 Product 类型对其进行转换。确保在您的产品实体的控制器顶部包含正确的 "use" 语句。
我想弄清楚,我认为这是一个非常常见的用例,但找不到正确的指针。
案例:
我有一个 product 实体和一个 review 实体。 在 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 的依赖项之前,我想在这里查看是否有人可以建议他们过去是否(以及如何)解决了这个问题。
非常感谢。
我会尽力让您轻松完成。假设您有一个控制器并且您正在使用的方法称为 "view"。您要做的是将表单提交给控制器中的另一个方法,我们称之为 "comment"。因此,对于数据转换,您可以像这样声明注释方法:
/**
* @Route( "/comment/{id}", name="product_comment" )
*/
public function commentAction( Request $request, Product $product )
{
....other code goes here.
}
因此您的表单的操作需要指向评论方法并传递产品的 ID。通过修改您的表单属性并将操作设置为评论路径并将产品的 id 传递到路径来执行此操作。 Symfony 将能够使用我向您展示的路线对您的 Product 实体进行类型提示,并根据作为您的方法参数的 Product 类型对其进行转换。确保在您的产品实体的控制器顶部包含正确的 "use" 语句。