2

ハイ、

Symfony 2プロジェクトで表示される奇妙なエラー メッセージについて短い質問があります。

DoctrineUserを介してロールを取得するエンティティ クラスがあります。これは完璧に機能します!しかし...

をさせたいので、メソッドUser implement EquatableInterfaceを追加しました。User::isEqualToここで私のエラーが発生します。この行は、特に$this->getRoles()エラーを引き起こしています:

Symfony2: 非オブジェクトでメンバー関数 toArray() を呼び出す

ただし、toArray内部で同じ関数を使用User::getRoles()すると、プロジェクトの残りの部分でうまく機能します。だから私はここで何が悪いのか分かりません。

誰かがそれを手伝ってくれますか?どんな助けでも大歓迎です!

更新 1

ログを調べて現在のヘルプを使用すると、いくつかの洞察が得られます。

  • $thisin は常にエンティティ ユーザー クラスを返すため、特別なことは何もありませんが、getRoles
  • isEqualTo呼び出しの後、$this->rolesが返されますがnull、その後は返されません。

更新 2

ここに私のさらなる洞察があります:

  • Konstantinのチェックを追加しましis_nullたが、実際の問題は解決しません。
  • ログイン中にログで確認できるように、refreshUserが呼び出され、すべてが完璧です。役割が見つかります。refreshUserisEqualToが起動された後、突然$this->rolesnull になりget_class($this->roles)、 と比較してユーザー エンティティ クラス (?!?!?) を返しますDoctrine\\ORM\\PersistentCollection

ユーザーの (un)serialize メソッドにロールを追加すると、このisEqualToメソッド内ではすべて問題ないように見えます。彼はついに役割をつかみ、私はそれに私の論理を追加することができます. 罰金!しかしその後、Symfony はこれやあれなどのエラーをスローます。私の主観では、それはシリアライゼーションと関係があります。

いくつかの読み取りの後、これが標準的な方法のように思われるため、ロール エンティティにシリアル化を追加しました。ユーザー クラス内でロールをシリアル化 (非) 化するのではなく、ユーザーとロールを単独でシリアル化します。しかし、ユーザーのシリアル化メソッドからロールを削除するとすぐに、古い問題が何度も発生し、$this->rolesいつでもnullisEqualTo が起動されます。このメソッド呼び出しを除いて、毎回すべてが素晴らしいです。

ここで何が間違っているのか、まったくわかりません。

何か案が?

4

1 に答える 1