【问题标题】:Symfony2 OneToMany relationships and formsSymfony2 OneToMany 关系和形式
【发布时间】:2012-09-16 11:06:53
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: php forms symfony doctrine


    【解决方案1】:

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

    /**
     * @Route("/item/{id}/comment")
     */
    public function commentAction(Item $item)
    {
        $comment = new Comment;
        $comment->setItem($item);
    
        $form = $this->createForm('item_comment', $comment);
    
        // ...
    }
    

    【讨论】:

    • 谢谢!这对我来说非常有效。我相信 Carlos Granados 的方式也可以,但我还没有尝试过,所以我会选择这个作为我的答案。
    【解决方案2】:

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

        $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' 属性将被正确设置

    【讨论】:

      猜你喜欢
      • 2018-02-10
      • 1970-01-01
      • 1970-01-01
      • 2014-09-10
      • 1970-01-01
      • 1970-01-01
      • 2014-08-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多