【问题标题】:Symfony Editing session objectSymfony 编辑会话对象
【发布时间】:2013-01-03 02:42:54
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: php forms session post symfony


    【解决方案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;
    

    【讨论】:

    • 不走运 :( $user 和 $entity 仍然拥有完全相同的数据 :S
    • 不要将请求绑定到表单,这实际上是从表单中获取数据并将其写入实体。您还可以通过 $form->get('username'); 从表单中获取特定数据
    • 克隆实体对我不起作用,$em->refresh($user) when !$form->isValid() 解决问题
    猜你喜欢
    • 2012-06-16
    • 1970-01-01
    • 1970-01-01
    • 2014-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-23
    • 2012-05-07
    相关资源
    最近更新 更多