Я создал FormType для изменения пароля пользователя.Когда я проверяю, совпадает ли поле oldPassword со старым паролем пользователя, я добавляю FormError в это поле.
Если указанный старый пароль неверен, он работает и отображается ошибка.
Но если заданный oldPassword верен, строка, где я добавляю свой FormError, вызывает выход из системы, пароль не изменяется, и я перенаправляюсь на страницу входа.
Когда я комментирую эту строку, смена пароля работает.(Не зависит от поля oldPassword)
Конструктор из моего UserPasswordType:
$builder
->add('passwordOld', PasswordType::class, [
'mapped' => false,
'label' => 'Aktuelles Passwort'
])
->add('password', RepeatedType::class, [
'type' => PasswordType::class,
'invalid_message' => 'Die Passwortfelder müssen übereinstimmen.',
'required' => true,
'first_options' => ['label' => 'Neues Passwort'],
'second_options' => ['label' => 'Wiederholen'],
])
->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $formEvent) {
/** @var User $user */
$user = $formEvent->getData();
if (!$this->userPasswordEncoder->isPasswordValid($user,
$formEvent->getForm()->get('passwordOld')->getData())) {
$formEvent->getForm()->get('passwordOld')->addError(new FormError('Passwort ist falsch.'));
}
$user->setPassword($this->userPasswordEncoder->encodePassword($user, $user->getPassword()));
})
->add('submit', SubmitType::class);
Мой контроллер:
/**
* @Route("/settings", name="app_settings")
* @param Request $request
* @param ObjectManager $objectManager
* @param UserInterface $user
* @return Response
*/
public function __invoke(Request $request, ObjectManager $objectManager, UserInterface $user): Response
{
$form = $this->createForm(UserPasswordType::class, $user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$objectManager->flush();
}
return $this->render('user/settings.html.twig', [
'form' => $form->createView()
]);
}
Мой репозиторий: https://gitlab.com/user010101/simple-timelock/tree/master/app