【问题标题】:Symfony2: Call to a member function toArray() on a non-objectSymfony2:在非对象上调用成员函数 toArray()
【发布时间】: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

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

  • $thisin getRoles 总是返回实体用户类,所以没什么特别的,但是
  • 在每个isEqualTocall 之后,$this->rolesreturns null,之后就不会了。

更新 2

以下是我的进一步见解:

  • 我已经加了Konstantinis_nullcheck,但是并没有解决实际问题。
  • 正如我在登录过程中在日志中看到的那样,refreshUser 被调用并且一切都很完美。找到了角色。在 refreshUser isEqualTo 被触发后,$this->roles 突然变为 null 并且 get_class($this->roles)returns 用户实体类 (?!?!?) 与 Doctrine\\ORM\\PersistentCollection 相比。

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

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

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

有什么想法吗?

【问题讨论】:

  • get_class($this)here 的结果是什么。
  • 它始终是用户实体类的一个实例,所以没什么特别的。但总是当 isEqualTo 被调用时,下面的 $this->roles 为空。之后在其他 getRoles() 调用中它不是......
  • It这对您有帮助吗?

标签: php symfony toarray


【解决方案1】:

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

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

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

【讨论】:

  • 我已经添加了这个空检查,但它不能解决问题(参见上面的第二次更新)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-16
  • 2010-09-26
  • 2012-04-20
  • 2015-05-01
  • 2014-08-07
相关资源
最近更新 更多