Я в шаблоне 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 }}