2012-09-20 70 views
0

我有以下代碼:更改爲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 [email protected] 
    echo $user2->email . '<br>'; // Echo [email protected] 

    $user2->email = 'blah'; 

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

所以我知道學說必須做與參考的東西。問題是我有一個表單,用戶可以更改他們的姓名和電子郵件,但如果電子郵件已被使用,我想顯示一個錯誤。但是,當我檢查驗證時,Symfony將數據綁定到用戶對象,所以不知何故會話正在用新的用戶對象進行更新,使我退出或更改用戶。

我該如何避免這種情況?

+0

您的示例證明,這些不是對同一對象的引用(您已更改$ user2的電子郵件並且$ user的電子郵件保持原樣)。這是一個很好的例子,如何做到這一點。 http://stackoverflow.com/questions/9812510/symfony2-how-to-modify-the-current-users-entity-using-a-form。祝一切順利! – Cyprian

回答

2

如果我的表單驗證失敗,我最終使用的解決方案是刷新用戶模型(將其恢復爲原始狀態)。

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