我试图弄清楚,我认为这是一个非常常见的用例,但无法找到正确的指针。
案件:
我有一个产品实体和一个评论实体。在 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] 删除。
我来说两句