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

У меня есть абстрактный класс сущности Person, который используется для хранения в одной таблице разных типов людей (служащих, фрилансеров и т. Д.) С помощью DiscriminatorMap. Затем различные классы сущностей (Employee, _3 _, ...) расширяют абстрактный класс Person.

Свойства - это охраняемые свойства. Метод получения и установки - это общедоступные методы, определенные в абстрактном классе Person.

У меня есть класс сущностей Team, который содержит коллекцию объектов Employee ArrayCollection.

Чтобы отобразить FormType, используемый для управления командой (CollectionType of Employee), я создал блок в шаблоне Twig для визуализации элемента ArrayCollection (виджет для визуализации полей элемента коллекции)

В этом блоке, если я это сделаю:

{% set person = form.vars.value %}
{{ dump(person) }}

Я получаю идеальный дамп существующего экземпляра члена

Employee {#942 ▼
  #team: Team {#700 ▶}
  #id: 85
  #role: "Coffee Maker"

Но если я попытаюсь получить доступ к свойству:

{% set person = form.vars.value %}
{{ dump(person.role) }}

Я получаю Twig_Error_Runtime: "Impossible to access an attribute ("role") on a null variable."

И если я попытаюсь вызвать метод получения:

{% set person = form.vars.value %}
{{ dump(person.getRole()) }}

Я получаю Twig_Error_Runtime: Impossible to invoke a method ("getRole") on a null variable.

При просмотре сообщения об ошибке я вижу такой вызов:

При попытке получить доступ к собственности: Twig_Template->getAttribute(null, 'role', array())

При попытке вызвать метод получения: Twig_Template->getAttribute(null, 'getRole', array(), 'method')

Как оно могло быть нулевым, если первый {{ dump(person) }} показал все свойства сущности?

Я попытался установить свойства абстрактного класса Person как общедоступные, и я попытался заменить «form.vars.value »на «form.vars.data», но все равно получаю те же ошибки.

Это действительно странно, потому что если я попытаюсь отобразить поля формы, она будет работать отлично (и значение будет правильно установлено)

{{ form_widget(form.team) }}
{{ form_widget(form.role) }}

Что я пропустил ? Любые советы по решению этой проблемы приветствуются. Спасибо заранее !


person Levure    schedule 23.04.2018    source источник
comment
Twig попытается выполнить get, is, has в качестве метода префикса переданного вами имени атрибута. Однако вы должны использовать form.vars.data при доступе к объекту из представления формы Symfony. См .: https://stackoverflow.com/questions/37744820/symfony-form-vars-data-vs-form-vars-value   -  person Will B.    schedule 23.04.2018
comment
У меня такое же поведение (такая же ошибка) при использовании form.vars.data вместо form.vars.values. : - /   -  person Levure    schedule 23.04.2018
comment
Опубликуйте свой controller, отображающий представление формы, FormType формы и ваш Employee класс.   -  person Will B.    schedule 23.04.2018