修改用户名时,为我的模板提供了错误的用户名

时间:2013-09-03 16:35:00

标签: symfony

我正在处理一个允许用户更改其用户名的表单。但是,我希望用户输入他当前的密码以更改用户名。

修改效果很好,当前密码错误时,会出错。但是,提供给模板的用户的用户名是错误的,因此我在标题栏中显示“Logged as XXX”的文本是错误的。

我的意思是,如果用户输入“YYY”作为用户名,当前用户名为“XXX”,则标题栏中的消息将“记录为YYY”,而不是“记录为XXX”。

我正在使用app.user.username在我的TWIG模板中显示名称。

这是我的控制器代码:

public function profileAction()
{
    $request = $this->getRequest();
    $user = $this->get('security.context')->getToken()->getUser();
    $form = $this->createForm(new UserType(), $user);

    $form->handleRequest($request);

    if ($form->isValid()) 
    {
        if($user->getPlainPassword() != "")
        {
            $encoder  = $this->get('security.encoder_factory')->getEncoder($user);
            $password = $encoder->encodePassword($user->getPlainPassword(), $user->getSalt());
            $user->setPassword($password);
            $user->setPlainPassword("");
        }
        $user->setPlainPassword("");
        $em = $this->getDoctrine()->getManager();
        $em->persist($user);
        $em->flush();
        return $this->redirect($this->generateUrl('user_profile'));
    }

    return $this->render('CafauSecurityBundle:Security:profile.html.twig', array(
        'form' => $form->createView(),
    ));
}

基本上,在我的表单中,用户可以更改其用户名和/或密码。每次,他都需要提供当前密码。

问题是当表单无效时,给予模板的用户名是在表单中编辑的用户名而不是原始用户名。

1 个答案:

答案 0 :(得分:1)

有两种方法可以解决问题:

  1. 为新用户名使用单独的字段,
  2. 使用表单模型。
  3. 单独字段

    您可以在User类中创建一个单独的字段来保存新用户名,并在验证之后和持久之前将其复制到实际的用户名 - 就像您目前使用密码一样。

    表单模型

    基本上,form model是嵌入实际模型和newUsernameplainPassword等额外字段的对象。如果你不想用这些额外的字段混淆实际的模型类,你会走这条路。