Symfony2收集字段by_reference = false与setter

问题描述:

我有一个标签字段的表单。标签是绑定实体上的Doctrine ArrayCollection。本场是by_reference = false作为文档的建议,但形式结合到实体的行为违法,同时加入新的元素,比如:Symfony2收集字段by_reference = false与setter

$data=$entity->getTags(); //gets the ArrayCollection but does not care that it is not an array, and shoulrd be converted first 
//do the value modifications like: 
$data[]=new Tag(...); 
$entity->setTags($data); //poor setter gets called with the already-updated collection, this operation is pointless 

我计算过,by_reference假是来避免这个问题。如果是,那么它出现故障。如果没有,那么该文档是非常差,有一个ArrayCollections的例子,但不关心这个非常残忍的setter的忽略...

我应该用什么来代替?在getter中返回一个toArray()是不行的(显然,设计模型与兼容性差的表单实现是不合理的。是否有类似'collection'的类型强制转换为数组?

+0

对不起,我可能已经混乱:在问题的代码的意思为了说明FormType是如何操作的,它不是我的代码,除了$ form-> bindRequest(...)和一个字段defi nition。 –

+0

Symfony 2.0或2.1? –

+0

2.0(我会转向2.1但现在买不起)。 –

添加标签作为其应该发生的实体:

$new_tag = new Tag(...); 
$entity->addTag($new_tag); 

没有为在基本教义产生实体馆藏没有设置功能

+0

1)没有addTag(),也没有它需要(所以我不会创建它,因为“数据模型应该是独立的”座右铭是我呼吸的空气 - 除非我希望在symfonys可怕的指导方针中窒息)。 2)我有一个二传手。学说为我生成了它。而我在文档中看到的内容也是一样的,所以你可能会误解。 3)你挖不明白一个问题。我不想要一个解决方案,而不是我发布的代码来说明FormType产生什么样的失败,而是一种避免失败的方法......我显然不想改变FormType的代码... –

+0

我没有误会主义为MoreToSomething关系产生一个add-fuction而不是一个集合,是的,我可能不会理解你的问题,因为它似乎在代码示例中想要找到添加额外“标签”的方法。我不认为我有你想找的东西。希望别人能帮助你。 –

+0

无论如何,谢谢。对不起,我的错误可能是实体可能是用Symfony的生成器而不是原则生成的。 –