覆盖symfony无线电小部件

时间:2012-12-10 19:01:50

标签: php forms symfony symfony-2.1

默认无线电小部件创建以下结构:

<label>...</label>
<div id="...">
<div class="clearfix prettyradio labelright  blue">
<input type="radio" id="..._0" name="..." value="..." style="display: none;">
<a href="#" class=""></a>
...
</div>

我找到了radio_widget块,但它本身只包含一个输入。所以我只能在那里定制这个部分:

<input type="radio" id="..._0" name="..." value="1" style="display: none;">

但我无法理解如何改变整个无线电选择领域的结构?

另外,有人知道,为什么symfony会在输入中添加display:none?

感谢。

2 个答案:

答案 0 :(得分:7)

如果您使用的是Radio Field Type,则可以通过调用input来自定义radio_widget块的form_widget(form.yourField)部分,只显示

{% block radio_widget %}
{% spaceless %}
    <input type="radio" {{ block('widget_attributes') }}{% if value is defined %} value="{{ value }}"{% endif %}{% if checked %} checked="checked"{% endif %} />
{% endspaceless %}
{% endblock radio_widget %}

但是,如果您使用Choice Field Type来显示无线电字段(expanded => true and multiple => false)。然后,您必须覆盖choice_widget块,该块调用每个子元素radio_widget块被全局div

包围

你是怎么得到“display:none”的?因为在默认块中没有这样的样式。

答案 1 :(得分:0)

如果您特别想要覆盖单个无线电场的渲染方式 - 即如何渲染组中的每个输入字段 - 请使用此公式作为块名称:

_<form name>_<field name>_entry_widget

请注意这一点:_entry

如果您正在使用展开式选择字段..._entry_row..._entry_label无法正常工作,因为它们不能用于个人选择 - 至少对于单选按钮而言

更一般地说,您可以使用以下代码了解Symfony在下次调用{{ form_widget(form) }}函数调用时打算使用哪个块:

{% for b in form.vars.block_prefixes %}
    {{ dump(b) }}
{% endfor %}

或者您可能希望在某些情况下查看child

{% for b in child.vars.block_prefixes %}
    {{ dump(b) }}
{% endfor %}
相关问题