【发布时间】:2014-11-11 23:43:47
【问题描述】:
喂,
关于我在 Symfony 2 项目中收到的奇怪错误消息,我有一个简短的问题。
我有一个实体类User,它通过Doctrine 检索其角色。这完美!但是……
我想让User implement EquatableInterface,所以我添加了User::isEqualTo 方法。这是我的错误发生的地方。 This line,尤其是$this->getRoles()导致错误:
Symfony2:在非对象上调用成员函数 toArray()
但是User::getRoles() 内部的相同toArray 函数用法在项目的其余部分上效果很好。所以我不明白这里有什么问题。
有人可以帮我吗?任何帮助表示赞赏!
更新 1
查看日志并使用您当前的帮助,以下是一些见解:
-
$thisingetRoles总是返回实体用户类,所以没什么特别的,但是 - 在每个
isEqualTocall 之后,$this->rolesreturnsnull,之后就不会了。
更新 2
以下是我的进一步见解:
- 我已经加了Konstantin的
is_nullcheck,但是并没有解决实际问题。 - 正如我在登录过程中在日志中看到的那样,
refreshUser被调用并且一切都很完美。找到了角色。在 refreshUserisEqualTo被触发后,$this->roles突然变为 null 并且get_class($this->roles)returns 用户实体类 (?!?!?) 与Doctrine\\ORM\\PersistentCollection相比。
当我将角色添加到用户的(取消)序列化方法中时,这个isEqualTo 方法中的一切似乎都很好。他终于抓住了角色,我可以添加我的逻辑。美好的!但之后 Symfony 会抛出像 this 或 that 这样的错误。在我的 pov 中,它与序列化有关。
在阅读了一些资料后,我为角色实体添加了序列化,因为这似乎是标准方式。自行序列化用户和角色,而不是(取消)序列化用户类中的角色。但是,一旦我从用户的序列化方法中删除角色,当 isEqualTo 被触发时,关于$this->roles 总是null 的老问题会一次又一次地发生。每次之前和之后一切都很好,除了这个方法调用。
我不知道这里到底出了什么问题。
有什么想法吗?
【问题讨论】: