我在使用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不处理它。
我一直在寻找可能的捆绑但没有什么
我不知道如何有一个漂亮的形式来保湿我的对象和相关的对象, 有没有人有解决这个问题或其他想法来解决这个问题?
非常感谢!
答案 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年前的事!嗯,它是在这里,以防其他人找到这个页面,我想。