禁用选项的Symfony Choice类型

z18hc3ub  于 2023-01-05  发布在  其他
关注(0)|答案(2)|浏览(124)

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>

我就是找不到方法...有必要构建自己的字段类型吗?

z0qdvdin

z0qdvdin1#

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

2mbi3lxu2#

根据表单布局:
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的Choice from修改选项参数

相关问题