我有一个抽象的实体类Person
,用于使用DiscriminatorMap在同一个表中存储不同类型的人(员工,自由职业者......)。
然后,不同的实体类(Employee
,Freelance
,...)扩展抽象Person
类。
属性是受保护的属性。
Getter和setter方法是Person
抽象类中定义的公共方法。
我有一个Team
实体类,其中包含Employee
个实体的ArrayCollection。
为了呈现用于管理团队的FormType(Employee的CollectionType),我在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."
如果我尝试调用getter方法:
{% 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())
尝试调用getter方法时:
Twig_Template->getAttribute(null, 'getRole', array(), 'method')
由于第一个{{ dump(person) }}
显示了所有实体属性,它怎么可能为空?
我尝试将Person抽象类属性设置为public,我尝试用'form.vars.data'替换'form.vars.value'但我一直得到同样的错误。
这真的很奇怪,因为如果我尝试渲染Form的字段,它就可以完美地工作(并且设置得很好)
{{ form_widget(form.team) }}
{{ form_widget(form.role) }}
我错过了什么? 任何解决该问题的提示都是受欢迎的。非常感谢提前!