Php Symfony 3:如何实现密码更新?

Php Symfony 3:如何实现密码更新?,php,symfony,Php,Symfony,我正在尝试实现密码更新。因此,我要求: 1) 当前密码 2) 新密码 3) 重复输入新密码 UserProfileForm中的我的表单生成器如下所示: class UserProfileForm extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('plainPa

我正在尝试实现密码更新。因此,我要求:

1) 当前密码 2) 新密码 3) 重复输入新密码

UserProfileForm中的我的表单生成器如下所示:

class UserProfileForm extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('plainPassword', RepeatedType::class, array(
                'type' => PasswordType::class,
                'first_options' => array(
                    'label'       => 'Password',
                    'constraints' => array(new NotBlank(array(
                        'groups'  => array(
                            'updatePasswordChecked',
                        )
                    ))),
                ),
                'second_options' => array(
                    'label'       => 'Repeat password',
                    'constraints' => array(new NotBlank(array(
                        'groups'  => array(
                            'updatePasswordChecked',
                        )
                    ))),
                ),
                'invalid_message' => 'Passwords don\'t match!',
            ))
            ->add('oldPassword', PasswordType::class)
            ->add('save', SubmitType::class, array('label' => 'Save'));
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class'            => 'AppBundle\Entity\User',
            'validation_groups' => array('update'),

        ));
    }
}
在用户实体中,我添加了$oldPassword:

/**
* @SecurityAssert\UserPassword(
*     message = "Wrong value for your current password",
*     groups = {"updatePasswordChecked"}
* )
*/
private $oldPassword;
我尝试更新密码的控制器:

class ProfileController extends Controller
{
    public function detailAction(Request $request)
    {
        $user = $this->get('security.token_storage')->getToken()->getUser();

        $form = $this->createForm(UserProfileForm::class, $user);
        $form->handleRequest($request);


        if ($form->isSubmitted())
        {
            if ($form->isValid())
            {
                dump('valid');
                // do whatever is needed to update the password
            }
        }

        return $this->render('pages/profile.html.twig', array('profileForm' => $form->createView()));
    }
}
在使用正确的旧密码提交表单后,我得到一个错误,即旧密码错误,系统会自动将我注销

在Symfony profiler中,我可以看到提交了正确的数据


我做错了什么?

您应该查看fosuser捆绑包是如何做到这一点的,这将为您提供一个清晰的概念。另外,在控制器内部,您不需要执行
$user=$this->get('security.token_storage')->getToken()->getUser()
只需
$this->getUser()
就足以获取当前用户。在验证密码之前,您似乎忘记了加密普通的旧密码。