Сбросить пароль Symfony 4
Я пытаюсь создать пароль сброса для пользователей в 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())
);
}
}
2 ответа
Вы должны изменить @Method("POST") на @Method({"GET","POST"}), потому что ваше действие предназначено для отображения и обработки формы.
Я думаю, что метод GET не является хорошим способом сброса пароля, вы можете добавить GET в аннотацию Methode, чтобы исправить это, но это плохой способ.
Хороший способ - просто отправить данные методом POST и обработать их в $request
@Route("/change-password", name="change_password"
Позаботьтесь о своем определении... -!== _