我尝试为我的项目创建一个自定义表单主题,我想在标签内部渲染所有复选框字段,如:
<label><input type="checkbox" /><label>
我发现我必须为此更改choice_widget_expanded块:
{% block choice_widget_expanded %}
{% spaceless %}
<div {{ block('widget_container_attributes') }}>
{% for child in form %}
{{ form_widget(child) }}
{{ form_label(child) }}
{% endfor %}
</div>
{% endspaceless %}
{% endblock choice_widget_expanded %}
问题是,当我将form_label块的内容复制到容器中而不是调用form_label(child)时,我真的没有看到块如何访问传递的变量(当我调用函数时这是子节点) ,以及如何在form_label块中调用form_widget函数:
{% block form_label %}
<label>{{ form_widget(?? what to put here??) }}</label>
{% endblock form_label %}
此外,如果我创建一个具有不同名称的块,例如“form_label_extra”并尝试调用它,则会抛出错误,因为它不是已注册的twig函数。
有谁知道这些变量是如何在表单块之间传递的,以及如何实现我的目标?
答案 0 :(得分:4)
我做了同样的修改以下块
{% block checkbox_widget %}
{% spaceless %}
<label class="button i_clear">
<input type="checkbox" {{ block('widget_attributes') }} {% if value is defined %} value="{{ value }}"{% endif %} {% if checked %} checked="checked"{% endif %} />
<span>{{ label }}</span>
</label>
{% endspaceless %}
{% endblock checkbox_widget %}
你仍然需要删除原始标签,你可以用javascript修改它,用css隐藏它或者修改模板,使它有条件地呈现,无论什么最适合你。
这个问题也可能会有所帮助:Symfony2 - How to put label and input for checkboxes/radios in a same line?