我有问题。我想用旗帜ico做国家选择,但我不知道如何为表格选择创建自定义主题。
我创建了测试表单:
->add('name', 'choice', array('choices' =>array('en' => 'England', 'de' => 'Deutshland')))
接下来在我看来我试试
{% block _send_name_widget %}
<select>
{% for f in form %}
{{ loop.index }}
{%endfor%}
</select>
{% endblock%}
{{ form_widget(form.name) }}
在我的html代码中,我得到了:
<select>
1
2
</select>
<select>
</select>
你可以告诉我为什么吗?
如何只使用参数渲染一个选择?
答案 0 :(得分:3)
我的choice_widget_options模板中不存在变量“options”。事实是“选项”不是变量的正确名称。如果你看一下\vendor\symfony\symfony\src\Symfony\Bundle\FrameworkBundle\Resources\views\Form\choice_widget_options.html.php
,你会发现Symfony使用了一个名为'choices'的变量。
上一代码的更正版本为:
{% block choice_widget_options %}
{% spaceless %}
{% for group_label, choice in choices %}
{% 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 %}>
<img src="/images/flags/{{ choice.label }}.jpg" />
{{ choice.label|trans({}, translation_domain) }}
</option>
{% endif %}
{% endfor %}
{% endspaceless %}
{% endblock choice_widget_options %}
答案 1 :(得分:1)
覆盖选择模板:
{% block choice_widget_options %}
{% spaceless %}
{% for group_label, choice in choices %}
{% 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 %}>
<img src="/images/flags/{{ choice.label }}.jpg" />
{{ choice.label|trans({}, translation_domain) }}
</option>
{% endif %}
{% endfor %}
{% endspaceless %}
{% endblock choice_widget_options %}
中表单主题的更多信息