2012-10-31 26 views
0

我有一個標籤字段的表單。標籤是綁定實體上的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但現在買不起)。 –

回答

0

添加標籤作爲其應該發生的實體:

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

沒有爲在基本教義產生實體館藏沒有設置功能

+0

1)沒有addTag(),也沒有它需要(所以我不會創建它,因爲「數據模型應該是獨立的」座右銘是我呼吸的空氣 - 除非我希望在symfonys可怕的指導方針中窒息)。 2)我有一個二傳手。學說爲我生成了它。而我在文檔中看到的內容也是一樣的,所以你可能會誤解。 3)你挖不明白一個問題。我不想要一個解決方案,而不是我發佈的代碼來說明FormType產生什麼樣的失敗,而是一種避免失敗的方法......我顯然不想改變FormType的代碼... –

+0

我沒有誤會主義爲MoreToSomething關係產生一個add-fuction而不是一個集合,是的,我可能不會理解你的問題,因爲它似乎在代碼示例中想要找到添加額外「標籤」的方法。我不認爲我有你想找的東西。希望別人能幫助你。 –

+0

無論如何,謝謝。對不起,我的錯誤可能是實體可能是用Symfony的生成器而不是原則生成的。 –