如何使用 Twig 在 Symfony2 中渲染标签内的输入

gab*_*orn 1 php symfony twig

我尝试为我的项目创建一个自定义表单主题,我想在其中呈现标签内的所有复选框字段,例如:

<label><input type="checkbox" /><label>
Run Code Online (Sandbox Code Playgroud)

我发现我必须为此更改 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 %}
Run Code Online (Sandbox Code Playgroud)

问题是,当我将 form_label 块的内容复制到容器中而不是调用 form_label(child) 时,我并没有真正看到该块如何访问传递的变量(当我调用函数时它是 child),以及如何在 form_label 块中调用 form_widget 函数:

{% block form_label %}
    <label>{{ form_widget(?? what to put here??) }}</label>
{% endblock form_label %}
Run Code Online (Sandbox Code Playgroud)

此外,如果我创建一个具有不同名称的块,例如“form_label_extra”并尝试调用它,则会引发错误,因为它不是已注册的树枝函数。

有谁知道这个变量是如何在表单块之间传递的,以及如何实现我的目标?

Xoc*_*zin 5

我做了同样的修改以下块

{% 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 %}
Run Code Online (Sandbox Code Playgroud)

您仍然需要删除原始标签,您可以使用 javascript 修改它,使用 css 隐藏它或修改模板,以便它有条件地呈现,无论哪种方式最适合您。

这个问题也可能有帮助:Symfony2 - How to put label and input for checkboxes/radios in a同一行?