Подтвердить что ты не робот

Как получить метод Doctrine2 Entity из формы Symfony2 в Twig

Я в шаблоне Twig, и у меня есть переменная "form", которая представляет собой Entity Form Doctrine2.

Этот объект имеет свойства, которые отображаются в форме, но у Entity также есть некоторые методы, к которым я хотел бы получить доступ из моего шаблона Twig.

Я хотел бы сделать что-то вроде этого:

{{ form.myMethod }}

или что-то вроде этого:

{{ form.getEntity.myMethod }}

но, к сожалению, он не работает.

Как я могу достичь того, что мне нужно?

4b9b3361

Ответ 1

Чтобы получить доступ к своей сущности из FormView в шаблоне ветки, вы можете использовать следующий код

{{ form.get('value') }}

Где форма - ваш объект FormView. Это вернет вашу сущность, и оттуда вы можете вызвать любые методы на ней. Если вы встраиваете коллекцию сущностей или одного объекта в свою форму, вы можете получить к ней доступ таким же образом.

{{ form.someembedform.get('value') }}

или

{% for obj in form.mycollection %}
  {{ obj.get('value').someMethod }}
{% endif %}

Ответ 2

Еще более удобный синтаксис для получения основного объекта вместо

{{ form.get('value') }}

:

{{ form.vars.value }}

Затем вы можете вызвать любой метод сущности следующим образом:

{{ form.vars.value.someMethod }}

См. также главу "Форма" в документах Symfony2:

http://symfony.com/doc/current/book/forms.html#rendering-a-form-in-a-template

Ответ 3

Только для того, чтобы обновить тему:

form.get('value')

устарел с момента symfony 2.1. Копировать из Symfony\Component\Form\FormView:

/*
 * @deprecated Deprecated since version 2.1, to be removed in 2.3. Access
 *             the public property {@link vars} instead.
 */
public function get($name, $default = null) ....

поэтому, я думаю,

form.vars.value.youMethod()

должен быть путь. Он работал на меня.

... и там это мой первый пост здесь. надеюсь, что это поможет!

Ответ 4

Потерял несколько часов, пытаясь понять, что происходит и почему

{{ form.vars.value }}

- NULL.

Если у вас есть объект form.element(не сам объект формы), например, если вы переопределяете шаблон form_row, который прошел объект form.row, вы можете получить Entity следующим образом:

{{ form.getParent().vars.value.MyEntityMethod }}

Надеюсь, что это поможет кому-то!

EDIT: Год и так далее - еще один полезный совет:

{% block sonata_type_collection_widget %}
    {% for child in form %}
        {{ child.vars.form.vars.value.name }}
    {% endfor %}
{% endblock %}

Ответ 5

методы объектов должны работать на ветке, я знаю, что использовал их в каком-то проекте.

попробуйте использовать ()

like {{ form.myMethod() }}

Ответ 6

Ни один из вышеперечисленных не работал у меня в версии 2.6.7. Я использовал настраиваемые виджеты формы, чтобы достичь этого:

{# src/AppBundle/Resources/views/Form/fields.html.twig #}
{% extends 'form_div_layout.html.twig' %}

{%- block entity_widget -%}
    <div {{ block('widget_container_attributes') }}>
    {%- for n, child in form %}
        {{- form_widget(child, {
            'entity': form.vars.choices[n].data
        }) -}}
        {{- form_label(child) -}}
    {% endfor -%}
    </div>
{%- endblock %-}

{%- block radio_widget -%}
{# You now have access to entity #}
{%- endblock %-}

Ответ 7

Кажется, что в какой-то момент значение действительно null. Таким образом, вы можете использовать

{{ (form.vars.value != null) ? form.vars.value.yourEntityMethod():'' }}

проверено в SF v3.0.6.

Ответ 8

используйте {{ form.getData.myMethod }}.

Ответ 9

Я не думаю, что есть простой способ получить объект из класса вида формы.

Вы можете рассмотреть возможность передачи объекта шаблону в качестве второго значения в дополнение к форме, а затем использовать обычный

{{ entity.myMethod }}