【问题标题】:Symfony 3 Associate Entity A with Entity BSymfony 3 将实体 A 与实体 B 关联
【发布时间】:2017-03-25 22:53:32
【问题描述】:

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

案例:

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

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

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

在谷歌搜索时,我发现 symfony 文档在这里谈到了数据转换器 (http://symfony.com/doc/current/form/data_transformers.html)。 恕我直言,对于手头如此简单的任务,这感觉有点过头了。

继续我的搜索,看来我并不孤单,因为 symfony 本身的 github repo 上显然已经提交了许多问题:

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 的依赖项之前,我想在这里查看是否有人可以建议他们过去是否(以及如何)解决了这个问题。

非常感谢。

【问题讨论】:

    标签: php symfony symfony-forms


    【解决方案1】:

    我会尽量让您轻松完成这项工作。假设您有一个控制器,并且您使用的方法称为“视图”。您要做的是让表单提交到控制器中的不同方法,我们称之为“评论”。因此,对于数据转换,您可以像这样声明注释方法:

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

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

    【讨论】:

    • 当然!看东西太久,你可能会错过明显的东西。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多