Forms 如何在Symfony';s小枝表单模板
我目前正在尝试覆盖Symfony 2中复选框块的默认渲染,但无法达到预期的效果 我创建了一个名为“类别”的条令实体,所有的视图都被正确创建 但是细枝形式的默认复选框标签的位置不正确 PS:我从这里的元素中删除了属性,使其更清晰易读。 原样: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
<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 %}