我正在爲廣告製作一個頁面。廣告可以是不同的類型,因此具有不同的數據。例如,一輛汽車將有make
和model
作爲額外的數據。動態表單(切換實體)symfony2
現在,我有一個基本的學說實體Advert
其中包含每個廣告所需的數據。如果用戶選擇創建車輛廣告,我需要動態地填充表單(我想要顯示車輛廣告的選項)。我需要動態填充表單(使用ajax和symfony2表單)。我需要動態填充表單(使用ajax和symfony2表單)。但我也需要將實體更改爲AdvertVehicle
。
這可能嗎?我看過在Symfony2的主頁
菜譜條目「如何動態地修改表單中使用表格活動」: 這應通過AJAX調用返回到您的應用程序進行處理。在該控制器中,您可以提交表單,而不是處理它,只需使用提交的表單來呈現更新的字段即可。然後可以使用來自AJAX調用的響應來更新視圖。
我瞭解如何使Ajax調用回我的控制器,我明白瞭如何使用表格的事件,但我怎麼得到渲染選擇框的響應(包含例如車型)回?有了新的AbstractType?或formbuilder?
然後,當用戶實際提交表單時,我需要使用所選廣告類型的實體。我可以根據用戶選擇動態地更改實體嗎?
編輯 我檢查了很好的表單innheritance,謝謝。我擴展AdvertType
並覆蓋buildForm()
方法,並在我添加我需要的項目AdvertVehicleType
我稱之爲父方法。
Futher說明 每個廣告實體包含price
,description
,title
和category
。有些廣告包含更多,例如make
和model
。它們由discriminatormap
(doctrine2)分化
例子:
// -- Entity
class CarAdvert extends Advert {
protected $model;
protected $make;
}
// -- Entity
// -- This uses discriminator mapping
class Advert {
protected $title;
protected $description;
protected $price;
protected $category;
}
如果用戶選擇cars
我想用CarAdvert
實體(驗證和持久性)類別,如果用戶選擇的房子hold itemcategory我只想使用正常的Advert
實體。
一個主要問題仍然是我無法弄清楚如何通過ajax渲染擴展窗體。這部分的任何提示?當用戶選擇汽車作爲一個類別時,我希望表單被更新(通過jQuery/ajax),但是如何製作一個控制器來檢索表單的擴展部分,並將html作爲響應發回(不使用樹枝並在視圖中渲染它,這是可能的)?
解決方案:
見下面回答!
你可以在你的表單類型中使用繼承,它可以避免爲2個類似的表單重複代碼,例如:'AdvertType'有2個領域。 'AdvertVehicleType'可以擴展'AdvertType'以添加2個字段。請告訴我們更多關於您的實體的信息,他們如何聲明,您如何區分兩種類型的「廣告」等。 –
對此問題的任何更新@Asbestos?我面臨着類似的問題,所以我對這個問題可能的解決方案或經驗感興趣,等等。謝謝! – acrobat
我希望更新後的答案已經足夠好了@acrobat如果您需要更多信息,請不要猶豫留下另一條評論! – Asbestos