2016-12-23 37 views
0

我在這裏提出一個簡短的問題,因爲我無法弄清楚我是否做錯了什麼或者Symfony2 Forms組件不能一致地工作。該方案如下:Symfony2 Form ChoiceType [單選按鈕]

  • 我有一個自定義表單類型[ChoiceType「子」型]與某些特定值
  • 我需要這個自定義窗體類型有默認值選擇時,沒有價值一直形式【前這樣的形式尚未提交]
  • 再說,我也可能有這種形式的選擇基於用戶的設置預先填寫[設置]

我會希望發生:

  1. 沒有用戶偏好 - 形式字段具有默認值[0]
  2. 用戶偏好的可用 - 表單字段的值是 - 表單字段已經值$data參數[0-7]
  3. 表格被提交傳遞實際發生的已提交了一個[0-7]

  • 如果表單字段設置爲選擇['expanded' => false]它作爲前(第一個值[0]被選中 - 可能是因爲它是第一個)和提交(0正在提交)
  • 如果表單域是單選按鈕列表['expanded' => true]沒有選擇開始和提交值該表格也不提交任何價值。

有人可以解釋我如何選擇單選按鈕嗎?如果沒有提交,我可以使用empty_data來設置該值,但初始表單顯示又如何?根據empty_value進行選擇(對於選擇框和單選按鈕)是完美的。

我也不能使用data選項,因爲它會覆蓋任何傳遞給表單的數據(參見上面的第2點)以及提交的數據。

@EDIT

我想避免兩兩件事:

  • 使用JavaScript絕對不是一個選擇
  • 覆蓋模板是我想避免爲好,主要是因爲我目前正在使用引導主題作爲基礎,後面將被正確的前端/模板取代
+0

你說得對,[這](http://stackoverflow.com/a/31573320/1970395)答案應該做的。 – user1970395

回答

0

我不確定要了解您的 題。 要管理表單默認值,您只需設置映射對象的屬性。

例如:

$formObject->child->attributeDefault = "defaultValue"; 
if($hasPreference) { 
    $formObject->child->attribute1 = "preferenceDefautlValue" 
} 
$form = $this->createForm(new YourFormType(), $formObject); 

$form->handleRequest($request) //overide default value by submitted one 
+0

是的,你說得對。但是,如果沒有顯示用戶首選項,則形成初始表單顯示,這個「映射對象」(實際上是一個數組)是空的。你建議我應該在那裏包含默認值嗎?它看起來像是一種解決方案,但如果可能的話,我寧願將所有內容都保留在字段類型的範圍內 – user1970395