2015-07-21 59 views
3

基於給定的choices選項的真實性,Symfony是否可以使用禁用選項呈現<select>表單類型?Symfony帶有禁用選項的選擇類型

我看到this thread(感謝DonCallisto)關於禁用選項擴展選項; 但是,我不想有一個擴大的選擇。 我想保留一個select元素,禁用options

$builder->add('list', 'choice', array(
    'choices' => array(
     array(
      'value' => 1, 
      'label' => '1', 
      'disabled' => false 
     ), 
     array(
      'value' => 2, 
      'label' => '2', 
      'disabled' => false 
     ), 
     array(
      'value' => 3, 
      'label' => '3', 
      'disabled' => true 
     ) 
    ), 
    // Instead of 
    // 'choices' => array(
    //  1 => 'Option 1', 
    //  2 => 'Option 2', 
    //  3 => 'Option 3' 
    //) 
); 

# Which would render to the following element 
<select [...]> 
    <option value='1'>1</value> 
    <option value='2'>2</value> 
    <option value='3' disabled='disabled'>3</value> 
</select> 

我簡直找不到路...... 是否有必要建立自己的字段類型?

+1

的可能重複[如何禁用形式選擇特定類型的項目?(http://stackoverflow.com/questions/14344639/how-to-disable-specific-item-in-form-choice-類型) – DonCallisto

+0

絕對錯過了這一個,謝謝!我會讀它的權利知道,看看它是我尋找的解決方案:) –

+0

最後不是重複。 ''''expanded''''選項會在''''checkboxes'''和''''''''''''元素之間創建一個完全不同的行爲。 但是我害怕理解Symfony核心目前不允許這種操作。 –

回答

13

自2.7版本以來,Symfony已經引入了一種方法來設置使用可調用的選擇屬性,這正是你所需要的。

這個代碼是從官方的Symfony文檔採取

$builder->add('attending', ChoiceType::class, array(
    'choices' => array(
     'Yes' => true, 
     'No' => false, 
     'Maybe' => null, 
    ), 
    'choices_as_values' => true, 
    'choice_attr' => function($val, $key, $index) { 
     // adds a class like attending_yes, attending_no, etc 
     return ['class' => 'attending_'.strtolower($key)]; 
    }, 
)); 

可以使用'choice_attr',並通過將據此決定是否增加disabled屬性或不依賴於價值,選擇的關鍵或索引功能。

... 
    'choice_attr' => function($key, $val, $index) { 
     $disabled = false; 

     // set disabled to true based on the value, key or index of the choice... 

     return $disabled ? ['disabled' => 'disabled'] : []; 
    }, 
... 
+0

好,我看看,我目前正在測試SF3,我會回到這個項目:) –

0

根據表格佈局:

https://github.com/symfony/symfony/blob/2.7/src/Symfony/Bridge/Twig/Resources/views/Form/form_div_layout.html.twig

和choice_widget_collapsed和choice_widget_options,我不認爲這是可能直接與Symfony的默認選擇形式。

你可以試試:

  • 建立你自己的選擇形式(通過擴展現有的並在其中添加參數選項列表,我認爲這是最好的辦法)
  • 使用JavaScript/jQuery的修改在現有Symfony的選擇加載時的選項參數從
+0

嘿,非常感謝,顯然ChoiceView不似乎允許選擇一個選項... https://github.com/symfony/symfony/blob/2.7/src/Symfony/Component/Form/ChoiceList/View /ChoiceView.php 但是我甚至不知道如何擴展選擇類型,如果所有的核心behing不允許我想做的事:/你知道嗎? –

+0

將它擴展爲一個新的表單,允許您的表單保留新的額外參數,並創建一個新的佈局,擴展現有的form_div_layout以覆蓋「選項」塊。請參見官方文檔:[http://symfony.com/doc/current/cookbook/form/create_custom_field_type.html](http://symfony.com/doc/current/cookbook/form/create_custom_field_type.html)和[HTTP: //symfony.com/doc/current/cookbook/form/form_customization.html](http://symfony.com/doc/current/cookbook/form/form_customization.html) – Cedric

相關問題