扩展EntityType以访问实体

问题描述 投票:0回答:1

我想在使用EntityType::class时访问实体的实例。我有一个如下表格:

->add('fooBars', MyNewType::class, [
    'class' => FooBar::class,
    'choices' => $fooBars,
    'label' => 'Foo Bar',
    'multiple' => true,
    'expanded' => true,
    'required' => false,
    'by_reference' => false,
]);

我已经创建了一个具有实体类型父级的新类型,然后我也有了一个自定义模板。跟着this我有我的实体类型显示,但我在循环的孩子,我不知道如何访问实体。

{% block foo_bar_widget %}
    {% spaceless %}
        {% if expanded %}
            <ul {{ block('widget_container_attributes') }}>
                {% for child in form if not child.rendered %}
                    <li>
                        {{ form_widget(child) }}
                        {{ form_label(child) }}
                    </li>
                {% endfor %}
            </ul>
        {% else %}
            {{ block('choice_widget') }}
        {% endif %}
    {% endspaceless %}
{% endblock %}

我想在它循环的实体上调用一个方法,但我不确定如何访问它。我不能抛弃孩子,因为它产生了太多。

symfony twig symfony-forms
1个回答
0
投票

这可以通过以下方式实现:

{% set entity = form.vars.choices[child.vars.value].data %}

所以完整的块可能看起来像:

{% block foo_bar_widget %}
    {% spaceless %}
        {% if expanded %}
            <ul {{ block('widget_container_attributes') }}>
                {% for child in form if not child.rendered %}
                    {% set entity = form.vars.choices[child.vars.value].data %}

                    <li>
                        {{ form_widget(child) }}
                        {{ form_label(child) }}
                    </li>
                {% endfor %}
            </ul>
        {% else %}
            {{ block('choice_widget') }}
        {% endif %}
    {% endspaceless %}
{% endblock %}

现在你可以像这样调用实体方法:

{{ entity.name }}}
© www.soinside.com 2019 - 2024. All rights reserved.