2013-01-19 79 views
1

使用Symfony 2我构建了一个页面,登录用户可以更新那里的细节。为此,在profileAction下的控制器中,我使用dotorine通过从会话中获取用户标识来获取用户。Symfony编辑会话对象

$user = $this->getUser(); 
$entity = $em->getRepository('GibboCodeKeeperBundle:User')->find($user->getId()); 

我然后绑定$实体对象一个形式,但是当表单提交,现在已被在绑定$实体对象更新一切都在会话中的$用户对象也发生了变化。反之亦然,如果我刷新$ user对象,$ entity也会刷新:S。

我想要$实体代表什么从窗体内返回和$用户代表什么是目前在数据库中试图持续,所以我可以看到用户已更新。

回答

1

你可以试试这个:

$user = $this->getUser(); 
$entity = $em->getRepository('GibboCodeKeeperBundle:User')->find($user->getId()); 

$form = $this->createForm($formType, $entity); 
$form->bind($request); 

if ($form->isValid()) { 
    // here is your updated user 
    $entity = $form->getData(); 

    // this will not update uses session 
    $em->refresh($user); 
} 

,或者你可以克隆实体

$oldEntity = clone $entity; 
+0

那是不正是我已经有:S –

+0

对不起已经更新了答案:) –

+0

没有运气:(既$ user和$ entity仍然保存着完全相同的数据:S –