在Symfony中更改当前用户的用户对象会将我退出

时间:2012-09-20 17:52:06

标签: php symfony

我有以下代码:

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会将数据绑定到用户对象,因此会以某种方式使用新用户对象更新会话,将我注销或更改用户。

我该如何避免这种情况?

1 个答案:

答案 0 :(得分:2)

我最终使用的解决方案是刷新用户模型(将其恢复为原始状态),如果表单验证失败。

// Reset to default values or else it will get saved to the session
$em = $this->getDoctrine()->getManager();
$em->refresh($user);