使用Symfony 2我构建了一个登录用户可以更新详细信息的页面。为此,在profileAction下的控制器中,我使用dotorine通过从会话中获取用户ID来获取用户。
$user = $this->getUser();
$entity = $em->getRepository('GibboCodeKeeperBundle:User')->find($user->getId());
然后我将$ entity对象绑定到一个表单,但是当提交表单时,在绑定的$ entity对象中现在已更新的所有内容也会在会话中的$ user对象中更改。反之亦然,如果我刷新$ user对象,$实体也会刷新:S。
我想让$ entity表示从表单内部返回的内容和$ user表示在尝试持久化之前当前在数据库中的内容,因此我可以看到用户已更新的内容。
答案 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;