Forms 如何在Symfony';s小枝表单模板

Forms 如何在Symfony';s小枝表单模板,forms,symfony,checkbox,overriding,twig,Forms,Symfony,Checkbox,Overriding,Twig,我目前正在尝试覆盖Symfony 2中复选框块的默认渲染,但无法达到预期的效果 我创建了一个名为“类别”的条令实体,所有的视图都被正确创建 但是细枝形式的默认复选框标签的位置不正确 PS:我从这里的元素中删除了属性,使其更清晰易读。 原样: <label>Field</label> <input type="checkbox" /> 在表格内,我放置了以下行: {{ form_errors(edit_form) }} {{ form_row(edit_for

我目前正在尝试覆盖Symfony 2中复选框块的默认渲染,但无法达到预期的效果

我创建了一个名为“类别”的条令实体,所有的视图都被正确创建

但是细枝形式的默认复选框标签的位置不正确

PS:我从这里的元素中删除了属性,使其更清晰易读。

原样:

<label>Field</label>
<input type="checkbox" />
在表格内,我放置了以下行:

{{ form_errors(edit_form) }}
{{ form_row(edit_form) }}
{{ form_widget(edit_form) }}
{{ form_rest(edit_form) }}
这会起作用,复选框会被覆盖,但默认细枝表单模板中的普通标签会继续显示,而“我的覆盖”复选框不会显示其中的标签,从而导致:

<label>Field</label>
<label><input type="checkbox" /></label>
字段
应在哪里:

<label><input type="checkbox" />Field</label>
字段
希望有人能帮忙。
提前感谢。

您应该禁用复选框的渲染标签。因此,您需要像这样覆盖块
form\u label

{% block form_label %}
{% if 'checkbox' not in block_prefixes %}
  {{ parent() }}
{% endif %}
{% endblock form_label %}


同样的问题困扰着我们的项目

PHP数组类型的单个实体字段(因此ORM将其作为JSON字符串存储在数据库记录单元中,透明地自动解码和编码) 应该分解用户的布尔首选项列表,每个首选项都呈现为复选框

因此,在EntityType.php中

 public function buildForm(FormBuilderInterface $builder, array $options) 

$builder
 ->add('prefs','collection', 
然后,在主细枝模板中,它不是按行迭代的
{{form(form)}}

{% for j,child in form %}
   <div id="form-child-{{ j }}" title="form-child-{{ j }}; loop={{loop.index}}">
        {{ form_row(child) }} 
   </div>
{% endfor %}     
其中包括:

{% block form_row %}
        {% if form.vars.block_prefixes.1 == 'checkbox'   %}
<div class="col-xs-12 checkbox-margins checkbox-label-padding">
    <div class="errors-container">
    {{ form_errors(form)}}
    </div>  
     {{ form_widget(form,{'attr': {'class': '  form-checkbox-widget'}}) }}{{ form_label(form) }}


</div>


        {% elseif form.vars.block_prefixes.1 == 'choice' %}
<div class="col-xs-12 top-form-title">
                        {{ form_label(form) }}
</div>
<div class="col-xs-12 select-margins">
    <div class="errors-container">
    {{ form_errors(form)}}
    </div>  
                    {{ form_widget(form,{'attr': {'class': 'select-style form-control'}}) }}

</div>
        {% elseif form.vars.block_prefixes.1 == 'submit'%}
         {{ form_widget(form,{'attr': {'class': 'top-form-button form-control pull-rigth'}}) }}
        {% elseif form.vars.block_prefixes.1 == 'text'%}

<div class="col-xs-12 top-form-title">
                        {{ form_label(form) }}
</div>
<div class="col-xs-12 ">
    <div class="errors-container">
    {{ form_errors(form)}}
    </div>  
{%block form_row%}
{%if form.vars.block_前缀.1=='复选框'%}
{{form_errors(form)}}
{{form_小部件(form,{'attr':{'class':'form checkbox小部件'}}}}{{form_标签(form)}}
{%elseif form.vars.block_前缀。1=='选项'%}
{{form_标签(form)}
{{form_errors(form)}}
{{form_小部件(form,{'attr':{'class':'selectstyleformcontrol'}}}}
{%elseif form.vars.block_前缀。1=='提交'%}
{{form_小部件(form,{'attr':{'class':'top form button form control pull right'}}}}}
{%elseif form.vars.block_前缀。1=='文本'%}
{{form_标签(form)}
{{form_errors(form)}}
{%set attr=attr | merge({'class':(attr.class | default('')~'form control top form input')| trim})%} {{form_小部件(form,{'attr':attr}}}


{%else%}
{{form_标签(form)}
{{form_errors(form)}}
{{form_widget(form)}
{%endif%}
{%endblock form_row%}

基本部分是上面第7行:
{form#u widget(form,{'attr':{'class':'form checkbox widget'}}}}}{{form#u label(form)}
用于复选框,它将小部件和标签顺序颠倒为我想要的(将交互式复选框放在文本标签之前)。

为了纠正输入和标签的顺序,您可以替代表格行块:

{% block form_row %}
  {% spaceless %}
    {% if 'checkbox' in block_prefixes %}
      {{ form_widget(form) }}
      {{ form_label(form) }}
    {% else %}
      {{ form_label(form) }}
      {{ form_widget(form) }}
    {% endif %}
    {{ form_errors(form) }}
  {% endspaceless %}
{% endblock form_row %}

您的回答帮助我解决了部分问题,现在我可以删除标签本身,但是“{label | trans({},translation_domain)}}”返回null。在form_标签中使用父项是非法的,因为form_标签没有父项。我有完全相同的问题。你找到解决办法了吗?谢谢
{% for j,child in form %}
   <div id="form-child-{{ j }}" title="form-child-{{ j }}; loop={{loop.index}}">
        {{ form_row(child) }} 
   </div>
{% endfor %}     
 {% form_theme form 'SystemExtMainBundle:Blocks:checkbox.html.twig' %} 
{% block form_row %}
        {% if form.vars.block_prefixes.1 == 'checkbox'   %}
<div class="col-xs-12 checkbox-margins checkbox-label-padding">
    <div class="errors-container">
    {{ form_errors(form)}}
    </div>  
     {{ form_widget(form,{'attr': {'class': '  form-checkbox-widget'}}) }}{{ form_label(form) }}


</div>


        {% elseif form.vars.block_prefixes.1 == 'choice' %}
<div class="col-xs-12 top-form-title">
                        {{ form_label(form) }}
</div>
<div class="col-xs-12 select-margins">
    <div class="errors-container">
    {{ form_errors(form)}}
    </div>  
                    {{ form_widget(form,{'attr': {'class': 'select-style form-control'}}) }}

</div>
        {% elseif form.vars.block_prefixes.1 == 'submit'%}
         {{ form_widget(form,{'attr': {'class': 'top-form-button form-control pull-rigth'}}) }}
        {% elseif form.vars.block_prefixes.1 == 'text'%}

<div class="col-xs-12 top-form-title">
                        {{ form_label(form) }}
</div>
<div class="col-xs-12 ">
    <div class="errors-container">
    {{ form_errors(form)}}
    </div>  
</div>
{% else %}

<div class="col-xs-12 top-form-title "> 
                        {{ form_label(form) }}
</div>
<div class="col-xs-12 ">
    <div class="errors-container">
    {{ form_errors(form)}}
    </div>  
                        {{ form_widget(form) }}
</div>
        {% endif %}


{% endblock form_row %}
{% block form_row %}
  {% spaceless %}
    {% if 'checkbox' in block_prefixes %}
      {{ form_widget(form) }}
      {{ form_label(form) }}
    {% else %}
      {{ form_label(form) }}
      {{ form_widget(form) }}
    {% endif %}
    {{ form_errors(form) }}
  {% endspaceless %}
{% endblock form_row %}