【问题标题】:Symfony Choice type with disabled options带有禁用选项的 Symfony Choice 类型
【发布时间】:2015-10-10 17:21:57
【问题描述】:

Symfony 有什么方法可以根据给定 choices 选项的真实性来呈现带有禁用选项的 <select> 表单类型?

我看到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>

我只是找不到路... 是否需要自己构建字段类型?

【问题讨论】:

  • 绝对错过了这个,谢谢!我会正确阅读它,看看它是否是我正在寻找的解决方案:)
  • 终于不重复了。 expanded 选项在 checkboxesselect 元素之间创建完全不同的行为。但是恐怕要理解 Symfony 核心目前是不允许这种操作的。

标签: forms symfony choice custom-field-type


【解决方案1】:

根据表格布局:

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的默认Choice形式。

你可以试试:

  • 构建您自己的选择表单(通过扩展现有的表单并将参数添加到选项列表,我认为这是最好的方法)
  • 使用 javascript/jquery 在加载时通​​过现有 Symfony 的 Choice from 修改选项参数

【讨论】:

【解决方案2】:

从 2.7 版开始,Symfony 引入了一种使用可调用对象设置选择属性的方法,这正是您所需要的。

此代码取自 Symfony 官方documentation

$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'] : [];
    },
...

【讨论】:

  • 太好了,我去看看,我正在测试SF3,我会回到这个项目:)
猜你喜欢
  • 2013-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-18
相关资源
最近更新 更多