ハイ、
Symfony 2プロジェクトで表示される奇妙なエラー メッセージについて短い質問があります。
DoctrineUser
を介してロールを取得するエンティティ クラスがあります。これは完璧に機能します!しかし...
をさせたいので、メソッドUser implement EquatableInterface
を追加しました。User::isEqualTo
ここで私のエラーが発生します。この行は、特に$this->getRoles()
エラーを引き起こしています:
Symfony2: 非オブジェクトでメンバー関数 toArray() を呼び出す
ただし、toArray
内部で同じ関数を使用User::getRoles()
すると、プロジェクトの残りの部分でうまく機能します。だから私はここで何が悪いのか分かりません。
誰かがそれを手伝ってくれますか?どんな助けでも大歓迎です!
更新 1
ログを調べて現在のヘルプを使用すると、いくつかの洞察が得られます。
$this
in は常にエンティティ ユーザー クラスを返すため、特別なことは何もありませんが、getRoles
- 各
isEqualTo
呼び出しの後、$this->roles
が返されますがnull
、その後は返されません。
更新 2
ここに私のさらなる洞察があります:
- Konstantinのチェックを追加しまし
is_null
たが、実際の問題は解決しません。 - ログイン中にログで確認できるように、
refreshUser
が呼び出され、すべてが完璧です。役割が見つかります。refreshUserisEqualTo
が起動された後、突然$this->roles
null になりget_class($this->roles)
、 と比較してユーザー エンティティ クラス (?!?!?) を返しますDoctrine\\ORM\\PersistentCollection
。
ユーザーの (un)serialize メソッドにロールを追加すると、このisEqualTo
メソッド内ではすべて問題ないように見えます。彼はついに役割をつかみ、私はそれに私の論理を追加することができます. 罰金!しかしその後、Symfony はこれやあれなどのエラーをスローします。私の主観では、それはシリアライゼーションと関係があります。
いくつかの読み取りの後、これが標準的な方法のように思われるため、ロール エンティティにシリアル化を追加しました。ユーザー クラス内でロールをシリアル化 (非) 化するのではなく、ユーザーとロールを単独でシリアル化します。しかし、ユーザーのシリアル化メソッドからロールを削除するとすぐに、古い問題が何度も発生し、$this->roles
いつでもnull
isEqualTo が起動されます。このメソッド呼び出しを除いて、毎回すべてが素晴らしいです。
ここで何が間違っているのか、まったくわかりません。
何か案が?