Как получить метод Doctrine2 Entity из формы Symfony2 в Twig
Я в шаблоне Twig, и у меня есть переменная "form", которая представляет собой Entity Form Doctrine2.
Этот объект имеет свойства, которые отображаются в форме, но у Entity также есть некоторые методы, к которым я хотел бы получить доступ из моего шаблона Twig.
Я хотел бы сделать что-то вроде этого:
{{ form.myMethod }}
или что-то вроде этого:
{{ form.getEntity.myMethod }}
но, к сожалению, он не работает.
Как я могу достичь того, что мне нужно?
Ответы
Ответ 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 }}