嘿,
我有一个简短的问题,关于我在 Symfony 2 项目中收到的奇怪错误消息。
我有一个实体类User
,它通过Doctrine检索其角色。这非常有效!但是...
我想让User 实现 EquatableInterface
,因此我添加了 User::isEqualTo
方法。这就是我的错误发生的地方。 This line ,尤其是 $this->getRoles()
导致错误:
Symfony2: Call to a member function toArray() on a non-object
但是在 User::getRoles()
中使用相同的 toArray
函数对于项目的其余部分效果很好。所以我不明白这里出了什么问题。
有人可以帮我吗?任何帮助表示赞赏!
更新1
查看日志并使用当前的帮助,以下是一些见解:
$this
位于getRoles
总是返回实体用户类,所以没有什么特别的,但是- 每次调用
isEqualTo
后,$this->roles
都会返回null
,之后就不再返回。
更新2
以下是我的进一步见解:
- 我已添加 Konstantin的
is_null
检查,但并不能解决实际问题。 - 正如我在登录期间在日志中看到的那样,调用了
refreshUser
并且一切都很完美。角色已找到。在刷新用户isEqualTo
被触发后,突然$this->roles
变为 null 并且get_class($this->roles)
返回用户实体类 (? !?!?) 与Doctrine\\ORM\\PersistentCollection
相比。
当我将角色添加到用户的(取消)序列化方法时,此 isEqualTo
方法中的一切似乎都很好。他终于捕获了角色,我可以添加我的逻辑。美好的!但之后 Symfony 会抛出类似 this 的错误或that 。在我的视角中,它与序列化有关。
经过一些阅读后,我向角色实体添加了序列化,因为这似乎是标准方法。单独序列化用户和角色,而不是序列化(取消)序列化用户类内的角色。但是,一旦我从用户的序列化方法中删除角色,老问题就会一次又一次地出现,当 isEqualTo 被触发时, $this->roles
总是 null
。每次之前和之后一切都很棒,除了这个方法调用。
我不知道这里到底出了什么问题。
有什么想法吗?
最佳答案
这很可能是由于在 getRoles() 调用时未填充 $this->roles
造成的。如果不检查其他代码,很难说出到底是什么原因造成的。一个简单的解决方案是在第 138 行的 getRoles()
方法中添加一个检查:
if ($this->roles === null) {
return null;
}
但我不确定这就是您想要做的,您可能想弄清楚为什么角色此时实际上是空的。
关于php - Symfony2 : Call to a member function toArray() on a non-object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26876715/