如何在symfony 2中设置渲染字段的名称属性?
预期产出:
<input type="text" name="test" value="test" />
以这种方式渲染字段
{{ form_widget(form.test, { 'attr': {'name': 'test'} }) }}
肯定不起作用。
输出仍然是
<input type="text" name="form[test]" value="test" />.
有没有办法动态设置name属性或id属性?谢谢。
答案 0 :(得分:1)
<input type="text" name="form[test]" value="test" />
已经有test
作为名称。当然,在您的情况下仍然存在名为form
的根表单名称。实际上并不建议删除它,因为当您阅读填充表单数据的请求时,您可以通过其表单名称来标识表单。
阅读 [表单]启用空根表单名称 https://github.com/symfony/symfony/pull/2936
答案 1 :(得分:1)
以这种方式覆盖Twig阻止:
{% block widget_attributes -%}
id="{{ id }}"
{%- if read_only %} readonly="readonly"{% endif -%}
{%- if disabled %} disabled="disabled"{% endif -%}
{%- if required %} required="required"{% endif -%}
{%- for attrname, attrvalue in attr -%}
{{- " " -}}
{%- if attrname in ['placeholder', 'title'] -%}
{{- attrname }}="{{ attrvalue|trans({}, translation_domain) }}"
{%- elseif attrvalue is sameas(true) -%}
{{- attrname }}="{{ attrname }}"
{%- elseif attrvalue is not sameas(false) -%}
{{- attrname }}="{{ attrvalue }}"
{%- endif -%}
{%- endfor -%}
name={{full_name}}
{%- endblock widget_attributes %}
更改只是将name = {{full_name}}从第一行移动到最后一行,因此当您将名称attr添加到表单构建器添加元素时,名称将不再被忽略。