默认无线电小部件创建以下结构:
<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?
感谢。
答案 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 %}