0

次のコードがあります。

public function editAction(Request $request)
{
    $user = $this->get('security.context')->getToken()->getUser();

    // Get the user
    $user2 = $this->getDoctrine()
        ->getRepository('OpinionsUserBundle:User')
        ->findOneById($user->id);

    echo $user->email . '<br>'; // Echo me@example.org
    echo $user2->email . '<br>'; // Echo me@example.org

    $user2->email = 'blah';

    echo $user->email; // Echoes blah
    die();
}

したがって、Doctrine が参照を使って何かをしているに違いないことはわかっています。問題は、ユーザーが自分の名前と電子メールを変更できるフォームを持っていることですが、電子メールが既に使用されている場合はエラーを表示したいと考えています。ただし、検証をチェックすると、Symfony はデータをユーザー オブジェクトにバインドするため、何らかの方法でセッションが新しいユーザー オブジェクトで更新され、ログアウトしたり、ユーザーを変更したりします。

どうすればこれを回避できますか?

4

1 に答える 1

2

最終的に使用した解決策は、フォームの検証が失敗した場合にユーザー モデルを更新する (元の状態に戻す) ことでした。

// Reset to default values or else it will get saved to the session
$em = $this->getDoctrine()->getManager();
$em->refresh($user);
于 2012-11-14T13:30:08.303 に答える