0

我有一个带有标签字段的表单。Tags 是绑定实体上的 Doctrine ArrayCollection。正如文档建议的那样,该字段是 by_reference=false ,但是在添加新元素时将表单绑定到实体是非法的,如下所示:

$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 false 是为了避免这个问题。如果是,那么它出现故障。如果不是,那么文档非常差,有一个 ArrayCollections 的例子,但不关心这种对设置器的非常残酷的忽视......

我应该改用什么?在 getter 中返回 toArray() 是行不通的(显然设计模型以兼容较差的表单实现是不明智的。是否可能有类似于“集合”的类型强制转换为数组?

4

1 回答 1

0

将标签添加到实体,因为它应该发生:

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

在基本的 Doctrine 生成实体中没有集合的集合函数。

于 2012-10-31T23:30:21.490 回答