2012-12-18 33 views
0

我有一些嵌套formTypes這樣的:自定義嵌套形式從母體中的Symfony 2

Form1包括Form2包括Form3

根據一些信息(例如,如果當前用戶是管理員),我想要改變Form3上某些字段的類型。

問題是我不知道該怎麼做,因爲沒有setOption方法在$builder對象,我可以從Form1打電話。

此外,我不知道我應該如何組織我的表格,實際上Form3也包含在其他一些形式中,而且每個字段幾乎都是相同的,只有少數人需要更改,這就是爲什麼我製作一個Form3表格以避免冗餘。

+0

一種解決方法是在你的Form3注入的背景下,並使用被授予調整建設者(添加字段或刪除,如果他的管理員或沒有例如) – Snroki

+0

那是在那種情況下工作,但是當我必須根據其他條件自定義窗體,如控制器中所做的一些選擇,我將不得不尋找另一種解決方案。我正在開發一個大型應用程序,所以我想要最好的開始,以避免以後的很多變化。 – Leto

+0

因此,不用直接使用上下文,你可以定義一個服務,讓你完成所有的測試並將其注入到你的表單中,這樣,如果你修改了「權限」 「它可以重複使用 – Snroki

回答

0

我認爲你應該使用事件訂閱者根據某些數據動態刪除/添加字段。

此類事件訂閱者允許您在表單創建後修改表單數據,並且它在表單實例上不在類型上工作。更多信息,你應該找到here

BTW關於需要依賴像安全上下文或東西,你可以create given form type as service並注入需要的對象

+0

我還沒有看到如何繼續下去,實際上它可以在另一個地方修改表單,而不是在builderForm mehod中,但我不明白這是一個好方法。我沒有看到事件類將在哪種情況下修改我的字段類型。也許問題剛剛發生了。 – Leto