0

タグ用のフィールドを持つフォームがあります。タグは、バインドされたエンティティの 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 で生成された基本的なエンティティには、コレクションの set-function はありません。

于 2012-10-31T23:30:21.490 に答える