Twig可以转储非null对象,但在尝试转储同一对象的属性或方法时指示该变量为null

时间:2018-04-23 13:30:40

标签: symfony twig symfony3.x

我有一个抽象的实体类Person,用于使用DiscriminatorMap在同一个表中存储不同类型的人(员工,自由职业者......)。 然后,不同的实体类(EmployeeFreelance,...)扩展抽象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) }}

我错过了什么? 任何解决该问题的提示都是受欢迎的。非常感谢提前!

0 个答案:

没有答案