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 %}