6

クラス User を基本クラスとして使用し、ユーザー クラスから Teacher を拡張しました。

ログインしようとすると、このエラーが発生します

識別子を含まない EntityUserProvider からユーザーを更新することはできません。ユーザー オブジェクトは、Doctrine によってマップされた独自の識別子でシリアル化する必要があります。

FOSUserbundleから対処したので、user.phpにシリアライズ/デシリアライズ機能があります

public function serialize()
    {
        return serialize(array(
            $this->password,
            $this->salt,
            $this->usernameCanonical,
            $this->username,
            $this->expired,
            $this->locked,
            $this->credentialsExpired,
            $this->enabled,
        ));
    }

エラーを確認できる場所が見つかりません。ハマった。助けてください

4

4 に答える 4

9
"You cannot refresh a user from the EntityUserProvider that does not contain an identifier. The user object has to be serialized with its own identifier mapped by Doctrine."

これは質問に対する答えではありませんが、誰かが上記のエラー メッセージをグーグル検索した場合 (私がしたように)、これがトップ ヒットです。そして、解決策を見つけたので、共有したいと思いました。

現在のユーザーをデータベースから削除してから、ユーザーをリダイレクトしようとすると、このエラーが発生します。(ばかげた間違いのように思えるかもしれませんが、エラー メッセージは役に立ちません!)解決策は、リダイレクトする前にセッションをクリアすることです。

$this->get('security.context')->setToken(null);
$this->get('request')->getSession()->invalidate();
于 2012-11-28T12:22:05.773 に答える
5

コードから、ユーザーもEntityUserProvider.phpシリアル化する必要があるようです。id

于 2012-07-20T04:49:08.497 に答える
0

User オブジェクトはある時点で複製されるため、これを行わないようにしてください (私が行ったように):

function __clone()
{
    $this->id = null;
}
于 2019-03-12T11:54:00.063 に答える