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

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

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

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

{{ form.myMethod }} 

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

 {{ form.getEntity.myMethod }} 

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

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

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

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

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

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

или

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

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

 {{ 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

Просто чтобы обновить тему:

 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() 

должен быть путь. Это сработало.

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

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

 {{ form.vars.value }} 

нулевой.

Если у вас есть объект 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 %} 

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

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

например {{ form.myMethod() }}

Ни один из вышеперечисленных не работал для меня в версии 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 %-} 

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

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

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

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

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

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

 {{ entity.myMethod }}