Symfony2 mongodb捆绑文档一对多表单

时间:2012-03-30 21:27:54

标签: forms mongodb symfony one-to-many doctrine-odm

我在使用mongoDB文档在Symfony 2中使用表单时遇到问题。

我正在尝试使用一个表单来表示我的第一个文档(Post),其关系是oneToMany到Tags(参考)

关系声明如下:

/**
 * @Assert\Collection
 * @MongoDB\ReferenceMany(targetDocument="Acme\ManagerBundle\Document\Tags")
 */
protected $tags;

标签有Id和名称。

我已经尝试了很多让它发挥作用的东西

$form = $this->createFormBuilder($tag)->add('tags', 'choice', array('choices' => $tags, 'multiple' => true, 'expanded' => true, 'empty_value' => true,  ))

表单显示选项,但一旦提交,表单无效并继续显示此错误:

  

“字段”0“,”1“,”2“未被预期”

我也试过这个:symfony2 form choice and mongodb

但使用它有点令人困惑

更新

这是我在提交帖子后得到的结果:

object(Doctrine\Common\Collections\ArrayCollection)#795 (1) {
  ["_elements":"Doctrine\Common\Collections\ArrayCollection":private]=>
  array(2) {
    [0]=>
    object(Acme\ManagerBundle\Document\Tags)#723 (2) {
      ["id":protected]=>
      string(24) "4f7a0eb1ecd111b99c3d2f25"
      ["name":protected]=>
      string(6) "Fruits"
    }
    [1]=>
    object(Acme\ManagerBundle\Document\Tags)#720 (2) {
      ["id":protected]=>
      string(24) "4f7a0ec7ecd111b99c3d2f26"
      ["name":protected]=>
      string(10) "Vegetables"
    }
  }
}

所以现在我理解为什么我有“字段”0“,”1“,”2“没有预期”但我不明白为什么Symfony不处理它。

我一直在寻找可能的捆绑但没有什么

我不知道如何有一个漂亮的形式来保湿我的对象和相关的对象, 有没有人有解决这个问题或其他想法来解决这个问题?

非常感谢!

2 个答案:

答案 0 :(得分:0)

如果没有看到涉及的数据,我只能在这里做出最好的猜测。

感觉就像你的代码行看起来像。

$tags = $post->getTags();

$fixedTags = array();
foreach ($tags as $tag) {
    $fixedTags[$tag->getId()] = $tag->getName();
}

$form = $this->createFormBuilder($post)
    ->add(
        'tags', 
        'choice', 
        array(
            'choices' => $fixedTags,
            'multiple' => true,
            'expanded' => true,
            'empty_value' => true
        )
    );

现在我认为发生的事情是你正在以这样的形式获取你的$ tag数据。

array(0 => (Object)Tag, 1 => (Object)Tag, 2 => (Object)Tag)

你真正想要的地方可能就是这样。

array('topic1' => 'Topic 1', 'topic2' => 'Topic 2', 'topic3' => 'Topic 3')

如果您不是这种情况,请回复一些数据输出,我相信我们能够提供更多帮助。

答案 1 :(得分:0)

默认情况下,choice字段不会保存(尽管您可以在表单提交时手动执行此操作)。您需要查看document类型,该类型无法很好地记录,但它与entity here的类型基本相同。

我没有看到这是3年前的事!嗯,它是在这里,以防其他人找到这个页面,我想。