HY,
我有一个关于我在 Symfony 2 项目中收到的奇怪错误消息的简短问题。
我有一个实体类User
,它通过 Doctrine 检索其角色。这很完美!但...
我想要User implement EquatableInterface
,所以我添加了User::isEqualTo
方法。这是我的错误发生的地方。 This line,尤其是$this->getRoles()
导致错误:
Symfony2:在非对象上调用成员函数toArray()
但toArray
中User::getRoles()
函数的相同用法在项目的其余部分非常有效。所以我不知道这里有什么问题。
有人可以帮我吗?任何帮助表示赞赏!
更新1
查看日志并使用您当前的帮助,以下是一些见解:
$this
在getRoles
总是返回实体用户类,所以没什么特别的,但是isEqualTo
来电后,$this->roles
都会返回null
,之后就会返回is_null
。更新2
以下是我的进一步见解:
refreshUser
项检查,但无法解决实际问题。isEqualTo
被调用,一切都很完美。发现了角色。刷新refreshUser $this->roles
后突然get_class($this->roles)
变为空,Doctrine\\ORM\\PersistentCollection
与isEqualTo
相比返回用户实体类(?!?!?)。当我将角色添加到用户的(un)序列化方法时,这个$this->roles
方法中的一切似乎都很好。他终于抓住了角色,我可以添加我的逻辑。精细!但之后Symfony正在抛出像this或that这样的错误。在我的pov中,它与序列化有关。
经过一些阅读后,我为角色实体添加了序列化,因为这似乎是标准的方法。单独序列化用户和角色,而不是(un)序列化用户类中的角色。但是,一旦我从用户的序列化方法中删除角色,当isEqualTo被触发时,旧问题会一再发生,而null
始终是{{1}}。每次之前和之后的每一次都很棒,除了这个方法之外。
我不知道这里到底出了什么问题。
有什么想法吗?
答案 0 :(得分:2)
这很可能是由于getRoles()调用时没有填充$this->roles
引起的。如果不通过其他代码,很难说究竟是什么导致它。一个简单的解决方案是在第138行的getRoles()
方法中添加一项检查:
if ($this->roles === null) {
return null;
}
但我不确定你想做什么,你可能想知道为什么角色在那一刻实际上是空的。