我创建了一个名为' AgenceSelectType'的自定义表单字段。它基本上是一个带有默认值和自定义主题的EntityType。
每次使用此类型渲染表单时,标签都会呈现两次。这让我很生气。我错过了什么?
Sybufony 3.1 on Ubuntu 16.04 php 7.1
我的fields.html.twig文件:
{% block agence_select_widget %}
{% spaceless %}
<div class="col-xs-12 col-sm-3 col-md-3 col-lg-3">
<label{% for attrname,attrvalue in attr %} {{attrname}}="{{attrvalue}}"{% endfor %}>
{{label }}
</label>
</div>
<div class="col-md-9 col-sm-9 col-xs-12 form-group">
<select {{ block('widget_attributes') }} class="form-control" >
{%- if preferred_choices|length > 0 -%}
{% set options = preferred_choices %}
{{- block('choice_widget_options') -}}
{%- if choices|length > 0 and separator is not none -%}
<li disabled="disabled">{{ separator }}</li>
{%- endif -%}
{%- endif -%}
{%- set options = choices -%}
{{- block('choice_widget_options') -}}
</select>
</div>
{% endspaceless %}
{% endblock %}
{%- block choice_widget_options -%}
{% for group_label, choice in options %}
{%- if choice is iterable -%}
<optgroup label="{{ group_label|trans({}, translation_domain) }}">
{% set options = choice %}
{{- block('choice_widget_options') -}}
</optgroup>
{%- else -%}
<option value="{{ choice.value }}"{% if choice is selectedchoice(value) %} selected="selected"{% endif %}>{{ choice.label }}</option>
{%- endif -%}
{% endfor %}
{%- endblock choice_widget_options -%}
我的自定义类型
class AgenceSelectType extends AbstractType
{
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'class' => 'AppBundle:Agence',
'label' => 'Agence',
'choice_label' => function ($agence) {
return $agence->getNom();
},
'required' => true,
));
}
public function getParent()
{
return EntityType::class;
}
}
提前感谢你让我摆脱这种疯狂: - )
答案 0 :(得分:2)
您如何在视图中显示表单行?
如果您使用form_row(form.agence)
,这是正常行为,因为您的block agence_select_widget
包含标签,而{{ form_row() }}
是form_label
+ form_widget
的短边。
我认为你的agence_select_widget
块应该只包含输入视图,而不是标签视图。
如果您确定希望agence_select_widget
包含标签,请使用{{form_widget(form.agence) }}
同时显示标签和输入,不要使用{{form_row() }}
(但如果您这样做,则不是这样做是正确的。)
为了好好利用小部件和标签块,我会推动
<div class="col-xs-12 col-sm-3 col-md-3 col-lg-3">
<label{% for attrname,attrvalue in attr %} {{attrname}}="{{attrvalue}}"{% endfor %}>
{{label }}
</label>
</div>
从您的{% block agence_select_widget %}
到新{% block agence_select_label %}
区块