2015-07-21 60 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

相关问题