2012-04-12 106 views
0

我在Symfony2中嵌入窗體時遇到問題。我可能會做一些技術上的錯誤,但也許我犯的錯誤是在數據庫設置的層面上,並且首先嵌入表單並不是必要的。在提交代碼之前,我們先關注一下。在Symfony2中使用嵌入式窗體

我做了兩個實體:V和O.它們都代表位置,但指的是不同類型的位置。通過ref-id,它們每個引用一個實體地址。多個V可以指代相同的地址,多個O可以指代相同的地址,並且甚至可以在同一地址上具有V和O.顯示V,O和地址的作用(控制器和路由工作)。創建或編輯地址也可以正常工作;我創建了一個名爲AddressType的表單類型,並且此呈現並正常工作。

V和O也有formTypes:VType和OType。他們有他們的樹枝模板,路線,控制器動作等。

現在我希望用戶能夠在窗體中輸入新的V,其中也有可用於輸入新地址的字段。所以我不希望用戶從某種列表中選擇一個已經存在的地址(但是我得到了這個工作),但我希望他們能夠添加一個新地址。如果地址已經存在於數據庫表「地址」中(這很可能),Symfony2應該引用該地址,而不是再次創建相同的地址。

現在我的問題是,我沒有成功地呈現嵌入在V或O形式中的地址表單(AddressType)。基本上我想將AddressType表單渲染爲V或O表單的一部分。這可能嗎?

但是,它很可能是我的db-setup不好,我不應該使Address成爲一個單獨的實體(和db表),但我應該將它作爲實體V和O的一部分。我也會解決這個問題,但這是否是一個好習慣?

我很感謝你的幫助。

+0

讓我們從基礎開始。請更新您的問題,併發布Address,V和O之間的關係(yml或註釋)。這將明確說明您正在使用哪種關係。 – Cerad 2012-04-12 13:40:44

回答

0

我有類似的問題。這是一種複雜的形式,可能不那麼容易做到。 最好的方法是創建一個自定義表單類型或甚至一個原始表單(我更喜歡),並編寫控制器操作,直接使用Request類爲您處理此表單。然後,您可以使用ConstraintCollections驗證您的輸入,並直接使用您的類和Doctrine的EntityManager組合您的實體。

此鏈接可能會得到有用的 - 或者至少幫了我很多關於非對象的驗證: http://www.ricardclau.com/2011/11/how-to-use-symfony2-validator-component-without-forms-entities-and-data-arrays/

所以基本上你將不得不在這裏寫代碼。

+0

非常感謝您Петър,絕對是您提供的一篇非常有趣的文章。奇怪的是,在Symfony2中這樣做太複雜了,看起來對於任何db來說都是非常普遍的需求。謝謝您的回答。 – 2012-05-19 13:10:12

相關問題