在Symfony 2.4中的formBuilder中将empty_value选项设置为'disabled'

时间:2013-12-14 19:17:19

标签: symfony

我在表单构建器中使用选项字段的选项empty_value,我想在生成的HTML中将其设置为“禁用”,以避免用户选择该选项。 字段类型中有一个名为“disabled”的选项,但如果可能的话,我不知道如何在empty_value中实现它。

这是建造者的重要部分。它可以工作,但可以选择空选项。

->add('game', 'entity', array(
    'empty_data'  => null,
    'empty_value' => 'Selecciona un juego',
    'class'=>'GameBundle:Game',
    'property'=>'name',
    'multiple'=>false
    ))

关于它的文档: http://symfony.com/doc/current/reference/forms/types/choice.html#empty-value

1 个答案:

答案 0 :(得分:2)

您可以创建新的表单主题,将默认选项呈现为已禁用。您所要做的就是覆盖choice_widget_collapsed折叠块:

{% extends 'form_div_layout.html.twig' %}

{% block choice_widget_collapsed %}
{% spaceless %}
    {% if required and empty_value is none and not empty_value_in_choices %}
        {% set required = false %}
    {% endif %}
    <select {{ block('widget_attributes') }}{% if multiple %} multiple="multiple"{% endif %}>
        {% if empty_value is not none %}
            <option value=""{% if required %} disabled="disabled"{% if value is empty %} selected="selected"{% endif %}{% endif %}>{{ empty_value|trans({}, translation_domain) }}</option>
        {% endif %}
        {% if preferred_choices|length > 0 %}
            {% set options = preferred_choices %}
            {{ block('choice_widget_options') }}
            {% if choices|length > 0 and separator is not none %}
                <option disabled="disabled">{{ separator }}</option>
            {% endif %}
        {% endif %}
        {% set options = choices %}
        {{ block('choice_widget_options') }}
    </select>
{% endspaceless %}
{% endblock choice_widget_collapsed %}

重要说明:这是choice表单类型的原始行为。但是,由于BB10浏览器存在问题,因此已将其删除。请参阅提交97cbb19b