我想用已定義的表單(使用configure方法)添加小部件(複選框)。Symfony:將小部件添加到已定義的表單
我不能將它們添加到窗體的定義中,因爲窗口小部件的數量會有所不同(根據對象)。
我看到這樣做的方法有兩種:
無論是傳遞一個變量到窗體的配置方法或可能使用嵌入形式。
但哪一個是正確的方法?還有其他解決方案嗎?
謝謝
我想用已定義的表單(使用configure方法)添加小部件(複選框)。Symfony:將小部件添加到已定義的表單
我不能將它們添加到窗體的定義中,因爲窗口小部件的數量會有所不同(根據對象)。
我看到這樣做的方法有兩種:
無論是傳遞一個變量到窗體的配置方法或可能使用嵌入形式。
但哪一個是正確的方法?還有其他解決方案嗎?
謝謝
正確的方法是將對象傳遞給選項。在表單中,您可以使用$this->getOption
方法檢索傳遞的選項。
我同意Don Pinkster關於傳遞選項並使用它在configure()方法中配置表單。
但如果需要它instanciating類時無法獲得的價值,你可以從任何地方使用:
$form->getWidgetSchema()->offsetSet($name, $widget);
$form->getValidatorSchema()->offsetSet($name, $validator)
您使用嵌入式或插件的事實不會改變太多,因爲你可以做到這一點是初始配置表單後:
$form->embedForm($name, $form2);
只是一個複選框,我沒有看到在使用嵌入形式的優勢。 在這兩種情況下,我都建議你在表單的類中使用公共方法執行此操作,以避免在操作類或其他地方爆炸表單配置。
Regards,
感謝您的解釋,我沒有意識到可以在實例化表單後在模式中添加小部件!但是,如果表單是手動創建的而不是從Doctrine/Propel模型生成的,那麼它可以嗎? –
用getWidgetSchema() - > offsetSet嘗試了幾次之後,我無法讓它工作。這個方法似乎只能從配置方法中起作用:'( –
它應該和教條生成的表單一樣好。要編輯表單類之外的模式,我認爲你需要在forme類上重新設置widget/validatorSchema,如embedForm所做的那樣。 – Benoit
我們可以通過任何類型的數據選項嗎?你需要傳遞構造函數中的選項,比如'$ this-> form = new myForm(array(),array(「variable」=>'test'));'? –
正確,它接受和種類的選擇。你的構造函數也是正確的。 –