Расширение EntityType для доступа к Entity - PullRequest
0 голосов
/ 16 апреля 2019

Я хотел бы получить доступ к экземпляру сущности при использовании 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 %}

Я бы хотел вызвать метод для объекта, который зацикливается, но я не уверен, как получить к нему доступ. Я не могу бросить ребенка, потому что он производит слишком много.

1 Ответ

0 голосов
/ 16 апреля 2019

Это может быть достигнуто с помощью следующего:

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