3

我一直在将 Symfony2 用于一个新项目并且遇到了一个相当愚蠢的问题。

我的两个学说实体 Item 和 Comment 之间存在 OneToMany 关系。我现在有一个表单供用户为给定项目创建新评论。在创建新评论时,该评论当然有一个属性 Item,这应该设置为当前正在评论的项目。

当单击项目上的评论链接时,一个 id 作为参数发送到表单页面,我的计划是让这个 id 填充一个隐藏字段,然后使用数据转换器在回发时将其转换为项目。

但我如何真正做到这一点?如何将此 id 放入表单中的隐藏字段中,以便数据转换器可以正确处理它?或者在 Symfony2 中使用表单时是否有更好/更正确的方法来处理这种关系?

4

2 回答 2

3

您不需要为此设置隐藏字段。您的操作必须知道用户正在评论哪个项目,因此您可以在评论上设置项目:

/**
 * @Route("/item/{id}/comment")
 */
public function commentAction(Item $item)
{
    $comment = new Comment;
    $comment->setItem($item);

    $form = $this->createForm('item_comment', $comment);

    // ...
}
于 2012-09-16T14:31:44.310 回答
1

无需数据转换器。只需为您的“项目”属性创建一个表单字段并将其设置为隐藏。就像是

    $item = $this->getDoctrine()
    ->getRepository('AcmeDemoBundle:Item')
    ->find($id);

    $comment = new Comment();
    $comment->setItem($item);

    $form = $this->createFormBuilder($comment)
            ... //add some fields
            ->add('item', array('hidden'=>true));
            ->getForm();

当您收到表单并绑定它时,Comment 对象的 'item' 属性将被正确设置

于 2012-09-16T11:18:16.343 回答