Добавление FormError вызывает Logout, когда строка никогда не достигается - PullRequest
0 голосов
/ 23 марта 2019

Я создал 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

...