【发布时间】:2015-02-18 14:20:00
【问题描述】:
OP 注意:只是
li元素没有以我忘记的形式传递。有关上下文,请参阅我的Previous Question,了解我如何需要能够将
select和option标签更改为ul和li标签,因为它们看起来和运行良好时使用Symfony 2 表单呈现下拉列表使用我选择的 CSS 框架。
由于更改了我的表单元素的呈现方式,提交后数据似乎不再通过。
我将覆盖choice 字段的{% choice_widget_* %} 部分,以便将它们更改为ul 和lis。这是我的更改:
{%- block choice_widget_collapsed -%}
{%- if required and empty_value is none and not empty_value_in_choices and not multiple -%}
{% set required = false %}
{%- endif -%}
<ul {{ block('widget_attributes') }}>
{%- 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') -}}
</ul>
{%- endblock choice_widget_collapsed -%}
{%- 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 -%}
<li value="{{ choice.value }}"{% if choice is selectedchoice(value) %} selected="selected"{% endif %}><a href="#">{{ choice.label|trans({}, translation_domain) }}</a></li>
{%- endif -%}
{% endfor %}
{%- endblock choice_widget_options -%}
我从Symfony 2 github source 找到并修改了这段代码,它允许我这样呈现我的表单:
问题:提交此表单时,“目标”字段正常,但我的覆盖似乎破坏了从下拉列表中检索数据的方式,并且我的调试显示空数据字段。
这是我的类型中setDefaultOptions() 中的换行符:
这是表单数据。请注意“目标”的模型数据确实存在,这是一个标准输入字段,以及定位器下拉列表的模型数据如何不存在(突出显示):
因此,由于我更改了表单的呈现方式,因此数据显示为 null,但是 对此我能做些什么?
我可以放置某种适配器或数据转换器来处理这种变化吗?需要做什么?我可以想象任何想要为自己的表单设置主题并删除一些在渲染过程中由 symfony 注入的烦人 div 的人都会发生这种情况。我能做什么?
【问题讨论】:
标签: php html symfony twig symfony-forms