У меня есть абстрактный класс сущности 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) }}
Что я пропустил ? Любые советы по решению этой проблемы приветствуются. Спасибо заранее !
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.2018controller
, отображающий представление формы,FormType
формы и вашEmployee
класс. - person Will B.   schedule 23.04.2018