Как получить метод Doctrine2 Entity из формы Symfony2 в Twig - PullRequest
19 голосов
/ 20 августа 2011

Я нахожусь в шаблоне Twig, и у меня есть переменная "form", которая представляет форму сущности Doctrine2.

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

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

{{ form.myMethod }}

или, может быть, что-то вроде этого:

{{ form.getEntity.myMethod }}

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

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

Ответы [ 8 ]

34 голосов
/ 09 сентября 2011

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

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

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

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

или

{% for obj in form.mycollection %}
  {{ obj.get('value').someMethod }}
{% endif %}
18 голосов
/ 01 февраля 2012

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

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

15 голосов
/ 26 октября 2012

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

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

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

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

5 голосов
/ 11 августа 2012

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

{{ form.vars.value }}

НЕДЕЙСТВИТЕЛЕН.

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

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

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

РЕДАКТИРОВАТЬ: Год и так далее - еще один полезный совет:

{% block sonata_type_collection_widget %}
    {% for child in form %}
        {{ child.vars.form.vars.value.name }}
    {% endfor %}
{% endblock %}
3 голосов
/ 21 августа 2011

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

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

как {{ form.myMethod() }}

1 голос
/ 20 июня 2017

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

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

, протестированный в SF v3.0.6.

0 голосов
/ 20 мая 2015

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

использовать {{ form.getData.myMethod }}.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...