2

嗨,

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

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

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

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

但是内部相同的toArray函数用法在User::getRoles()项目的其余部分中效果很好。所以我不明白这里有什么问题。

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

更新 1

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

  • $thisin总是返回实体用户类,所以没什么特别的,但是getRoles
  • 每次isEqualTo调用后,$this->roles返回null,之后不返回。

更新 2

以下是我的进一步见解:

  • 我添加了Konstantinis_null支票,但它并没有解决实际问题。
  • 正如我在登录期间在日志中看到的那样,refreshUser被调用并且一切都很完美。找到了角色。在 refreshUserisEqualTo被触发并突然$this->roles变为 null 并get_class($this->roles)返回用户实体类 (?!?!?) 之后,与Doctrine\\ORM\\PersistentCollection.

当我将角色添加到用户的(取消)序列化方法时,此方法中的一切似乎都很好isEqualTo。他终于抓住了角色,我可以添加我的逻辑。美好的!但是之后 Symfony 会抛出这样那样的错误。在我的 pov 中,它与序列化有关。

在阅读了一些资料后,我为角色实体添加了序列化,因为这似乎是标准的方式。自行序列化用户和角色,而不是(取消)序列化用户类中的角色。但是,一旦我从用户的序列化方法中删除角色,旧问题就会一次又一次地发生,而且$this->roles总是null在触发 isEqualTo 时。每次之前和之后一切都很好,除了这个方法调用。

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

任何想法?

4

1 回答 1

2

这很可能是由于$this->roles在 getRoles() 调用时未填充造成的。如果不通过其他代码,很难说出究竟是什么原因造成的。getRoles()一个简单的解决方案是在第 138 行为您的方法添加一个检查:

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

但我不确定这就是你想要做的,你可能想弄清楚为什么角色在那一刻实际上是空的。

于 2014-11-12T00:11:22.210 回答