1

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

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

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

我想让 $entity 代表从表单内部返回的内容,并让 $user 代表在尝试持久化之前数据库中当前的内容,这样我就可以看到用户更新了什么。

4

1 回答 1

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;
于 2013-01-19T14:53:11.020 回答