重置密码symfony 4

时间:2018-04-01 17:57:25

标签: symfony-forms symfony4 reset-password

我正在尝试为symfony 4中的用户创建重置密码,我有这个错误

  

找不到“GET / change-password”的路由:方法不允许(允许:   POST)

我正在寻求帮助

我的控制器:

class ChangepasswordController extends Controller
{
private $oldpassword;
private $newpassword;

/**
 * @Route("/change-password", name="change_password", defaults={"email=null"})
 * @Method("POST")
 * @param Request $request
 * @param AuthenticationUtils $authenticationUtils
 * @param UserPasswordEncoderInterface $passwordEncoder
 * @param $email
 * @return Response
 */
public function ChangepasswordAction(Request $request, UserPasswordEncoderInterface $passwordEncoder, $email)
{
    $user = new User();
    $form = $this->createForm(ChangepasswordType::class, $user);
    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {

        try {
            $user = $this->getDoctrine()->getRepository(User::class)->find($email);


        } catch (ExceptionInterface $e) {
            $this->addFlash('danger', "Cet email n'existe pas.");
        }

        //Recuperer le nouveau mot de passe tapé par l'utilisateur
        $newpassword = $passwordEncoder->encodePassword($user, $user->getPassword());
        //recuperer l'ancien mot de passe dans la base de donnéees
        $oldpassword = $user->getPassword();

        if ($newpassword = $oldpassword) {
            $this->addFlash('danger', "Ce mot de passe est dejà utilisé.");

        } else {
            $user->setPassword($newpassword);
        }

        $em = $this->getDoctrine()->getManager();
        $em->persist($user);
        $em->flush();

        $this->addFlash('success', 'votre mot de passe est bien  réinitialisé');

        # Redirection sur la page de connexion
        return $this->redirectToRoute('connexion');
    }
    return $this->render(
        'security/changemotdepasse.html.twig',
        array('form' => $form->createView())
    );

}

}

3 个答案:

答案 0 :(得分:2)

您必须将@Method(" POST")更改为@Method({" GET"," POST"}),因为您的操作用于显示并处理表格。

答案 1 :(得分:0)

我认为GET方法不是重设密码的好方法,您可以在Methode批注中添加GET来修复它,但这是不好的方法。

好的方法是通过POST方法发送数据并在$ request中处理

答案 2 :(得分:-2)

@Route("/change-password", name="change_password"

注意定义...-!== _