2013-07-26 52 views
0

我正在使用Symfony2來設置一個窗體,其中可以編輯窗體實體。
一個書架包含可讀實體集合(例如Book,Magazine等 - 全部從Readable繼承)。
用戶可以添加更多可讀實體(表單通過JavaScript進行擴展),並且可以從下拉列表中選擇他想要添加的可讀類型。根據所選的下拉值,呈現不同的表單字段。到現在爲止還挺好。Symfony2:表單提交時的實體實例化取決於用戶選擇

現在,當表單提交給服務器時,根據表單中選擇的Readable-Type用戶,應該實例化不同的實體類型。 如果我什麼都不做,Symfony只是實例化基類R​​eadable(而不是Book,Magazine等)。

如何告訴Symfony根據從下拉列表中選擇的值實例化正確類型的Readable?

我試着用FormEvent-監聽器,但是:

  • PRE_SUBMIT我只得到含$事件 - 「原始」 形態的數據數組>的getData(),即無實體已被instatiated至今。但是,在這個階段,我仍然可以獲得下拉的價值。
  • in SUBMIT表單數據已被分配給適當的實體。此外,新的Readable已經與基本的Readable-Class一起安裝。但現在,我無法訪問下拉菜單中的值。

這樣做的正確方法是什麼?

編輯
添加了保質FormType最小的代碼示例:
https://gist.github.com/anonymous/401495b701982adafb96
代碼infinite_form_polycollection:
https://gist.github.com/anonymous/b5f0ed10ca9c52177f01

+0

你可以提供一堆你的代碼,請斯蒂芬? –

+0

我不確定,你想要哪個代碼 - 我在上面添加了一些Shelf FormType代碼。如果你想要別的東西,請說出來。 – Stefan

+0

抱歉抱歉,但您有沒有機會查看代碼? – Stefan

回答

0

似乎供應商目錄中的PolyCollection的PHP文件有問題,因爲在從vendor-dir中刪除與無限表單包相關的所有內容並用composer重新安裝之後,現在一切正常。但是,謝謝你的努力YoannCh

0

你試過看着this part of the doc?因爲「嵌入表單」似乎符合您的需求。

+0

是的,我已經使用過這個部分。問題不在於渲染或保存本身。只保存一個Readables集合不是一個問題 - 但保存正確類型的Readable。 – Stefan