Symfony2:在非对象上调用成员函数toArray()

时间:2014-11-11 23:43:48

标签: php symfony toarray

HY,

我有一个关于我在 Symfony 2 项目中收到的奇怪错误消息的简短问题。

我有一个实体类User,它通过 Doctrine 检索其角色。这很完美!但...

我想要User implement EquatableInterface,所以我添加了User::isEqualTo方法。这是我的错误发生的地方。 This line,尤其是$this->getRoles()导致错误:

  

Symfony2:在非对象上调用成员函数toArray()

toArrayUser::getRoles()函数的相同用法在项目的其余部分非常有效。所以我不知道这里有什么问题。

有人可以帮我吗?任何帮助表示赞赏!

更新1

查看日志并使用您当前的帮助,以下是一些见解:

  • $thisgetRoles 总是返回实体用户类,所以没什么特别的,但是
  • 每次isEqualTo来电后,$this->roles都会返回null,之后就会返回is_null

更新2

以下是我的进一步见解:

  • 我添加了Konstantin refreshUser项检查,但无法解决实际问题。
  • 正如我在登录时在日志中看到的那样,isEqualTo被调用,一切都很完美。发现了角色。刷新refreshUser $this->roles后突然get_class($this->roles)变为空,Doctrine\\ORM\\PersistentCollectionisEqualTo相比返回用户实体类(?!?!?)。

当我将角色添加到用户的(un)序列化方法时,这个$this->roles方法中的一切似乎都很好。他终于抓住了角色,我可以添加我的逻辑。精细!但之后Symfony正在抛出像thisthat这样的错误。在我的pov中,它与序列化有关。

经过一些阅读后,我为角色实体添加了序列化,因为这似乎是标准的方法。单独序列化用户和角色,而不是(un)序列化用户类中的角色。但是,一旦我从用户的序列化方法中删除角色,当isEqualTo被触发时,旧问题会一再发生,而null始终是{{1}}。每次之前和之后的每一次都很棒,除了这个方法之外。

我不知道这里到底出了什么问题。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

这很可能是由于getRoles()调用时没有填充$this->roles引起的。如果不通过其他代码,很难说究竟是什么导致它。一个简单的解决方案是在第138行的getRoles()方法中添加一项检查:

if ($this->roles === null) {
     return null;
}

但我不确定你想做什么,你可能想知道为什么角色在那一刻实际上是空的。