Symfony2 OneToMany关系和形式

时间:2012-09-16 11:06:53

标签: php forms symfony doctrine

我一直在使用Symfony2进行新项目,并遇到了一个相当愚蠢的问题。

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

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

但是我该如何实现这项工作呢?如何将此ID转换为表单中的隐藏字段,以便Data Transformer可以正确处理它?或者在Symfony2中使用表单时是否有更好/更正确的处理此类关系的方法?

2 个答案:

答案 0 :(得分:3)

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

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

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

    // ...
}

答案 1 :(得分:1)

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

这样的东西
    $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'属性