我正在尝试使用symfony2中的Twig自定义表单布局。我的目标是渲染看起来像这样的 radio 输入...

<label class=" required">Label name</label>
<span class="form-radio">
    <input type="radio" name="album_has_subalbums_1" /> Yes
</span>
<span class="form-radio">
    <input type="radio" name="album_has_subalbums_0" /> No
</span>

我在自定义表单主题中覆盖了radio_widget块,如下所示
{% block radio_widget %}
{% spaceless %}
    <span class='form-radio'>
        <input type="radio" {{ block('widget_attributes') }}{% if value is defined %} value="{{ value }}"{% endif %}{% if checked %} checked="checked"{% endif %} />
    </span>
{% endspaceless %}
{% endblock radio_widget %}

但是,这将呈现以下标记:
<label class=" required">Label name</label>

<span class="form-radio">
    <input type="radio" id="album_has_subalbums_1" name="album[has_subalbums]" required="required" value="1">
</span>
<label for="album_has_subalbums_1" class=" required">Yes</label>

<span class="form-radio">
    <input type="radio" id="album_has_subalbums_0" name="album[has_subalbums]" required="required" value="0">
</span>
<label for="album_has_subalbums_0" class=" required">No</label>

基本上,为每个 radio 输入元素创建一个标签来标识其值是Yes还是No。我正在使用一个预先存在的设计,因此我无法轻松地调整html标记。

如何防止 radio 输入生成选择文本作为标签?我知道它在内部调用field_label块,但是正如您所看到的,我的radio_widget没有引用它,因此对于如何防止这种行为我有些困惑。

编辑:

明确地说,我想要与第一个示例相同的结构...我省略了名称和值属性等,但是显然它只是出于演示目的。

最佳答案

您需要覆盖的不是radio_widget块,而是choice_widget一个:

{% block choice_widget %}
{% spaceless %}
    {% if expanded %}
        <div {{ block('widget_container_attributes') }}>
        {% for child in form %}
            {{ form_widget(child) }}
            {{ child.get('label') | trans }} {# <- this is what you need #}
    {# leave the rest untouched #}

并且不要忘记清除缓存以使此更改生效。

关于forms - Symfony2 : preventing radio widgets from rendering labels,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8316739/

10-12 23:39