Symfony编辑会话对象

时间:2013-01-19 13:50:26

标签: php forms session post symfony

使用Symfony 2我构建了一个登录用户可以更新详细信息的页面。为此,在profileAction下的控制器中,我使用dotorine通过从会话中获取用户ID来获取用户。

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

然后我将$ entity对象绑定到一个表单,但是当提交表单时,在绑定的$ entity对象中现在已更新的所有内容也会在会话中的$ user对象中更改。反之亦然,如果我刷新$ user对象,$实体也会刷新:S。

我想让$ entity表示从表单内部返回的内容和$ user表示在尝试持久化之前当前在数据库中的内容,因此我可以看到用户已更新的内容。

1 个答案:

答案 0 :(得分: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;