Php Symfony/Twig:表单小部件的内部ID?

Php Symfony/Twig:表单小部件的内部ID?,php,symfony,twig,Php,Symfony,Twig,我必须修改radio\u小部件,并希望为和提供相同的ID,每对都应该是唯一的 目前我正在使用,但我更喜欢内部计数器,比如{{loop.index}}(),以避免冲突 {% block radio_widget -%} {% set id = random() %} <div class="radio"> <label for="radio_{{ id }}">Label for {{ id }}</label>

我必须修改
radio\u小部件
,并希望为
提供相同的ID,每对都应该是唯一的

目前我正在使用,但我更喜欢内部计数器,比如
{{loop.index}}
(),以避免冲突

{% block radio_widget -%}
    {% set id = random() %}
    <div class="radio">
        <label for="radio_{{ id }}">Label for {{ id }}</label>
        <input type="radio" id="radio_{{ id }}" {# ...#}/>
    </div>
{%- endblock radio_widget %}
{%block radio_widget-%}
{%set id=random()%}
{{id}的标签
{%-endblock radio_widget%}
有人知道更好的解决方案吗

提前谢谢

ProjectTwigExtension.php

config.php

小枝

{%block radio_widget-%}
{%set id=get_unique_key('radio_')%}
{{id}的标签
{%-endblock radio_widget%}

可能您可以尝试以下方法:

{% block radio_widget -%}
  {% if counter is defined %} {# set desired id #}
    {% set id = counter %}
  {% else %}
    {% set id = random() %} {# default value #}
  {% endif %}
    <div class="radio">
        <label for="radio_{{ id }}">Label for {{ id }}</label>
        <input type="radio" id="radio_{{ id }}" {# ...#}/>
    </div>
{%- endblock radio_widget %}

对于每个表单小部件,已经存在一个预先计算的唯一id

请参阅:
\Symfony\Component\Form\Extension\Core\Type\BaseType::buildView

在twig中,可以通过
{{form.vars.ID}}
访问此ID

本质上,id只是嵌套表单类型名称的串联



请注意,
form.vars
通常包含表单定制所需的所有有用内容。当使用
FormTypeInterface::buildView
FormTypeInterface::finishView
将数据传输到表单呈现时,它也是放置自定义值的地方。

您指的是用于表单呈现的主无线电小部件?如果是这样,您已经在:
form.vars.id
@Yoshi中拥有了一个依赖于小部件的unqiue id,这正是我所需要的。把它作为答案贴出来,我会接受的。非常感谢。一般来说,这是一个很好的解决方案,但这次我只需要
form.vars.id
。谢谢你的回复!
$twig = new Twig_Environment($loader);
$twig->addExtension(new ProjectTwigExtension());
{% block radio_widget -%}
    {% set id = get_unique_key('radio_') %}
    <div class="radio">
        <label for="{{ id }}">Label for {{ id }}</label>
        <input type="radio" id="{{ id }}" {# ...#}/>
    </div>
{%- endblock radio_widget %}
{% block radio_widget -%}
  {% if counter is defined %} {# set desired id #}
    {% set id = counter %}
  {% else %}
    {% set id = random() %} {# default value #}
  {% endif %}
    <div class="radio">
        <label for="radio_{{ id }}">Label for {{ id }}</label>
        <input type="radio" id="radio_{{ id }}" {# ...#}/>
    </div>
{%- endblock radio_widget %}
{% for i in 0..10 %}
  {% set counter = loop.index %}
  {{- block('radio_widget') }}
{% endfor %}