Symfony - установка данных с помощью прослушивателя форм

У меня есть регистрационная форма.

Когда форма отправлена ​​и действительна, происходит множество проверок, таких как проверка совпадения пароля и password_confirm. В противном случае я перенаправляюсь на ту же страницу с сообщением об ошибке.

Но я не хочу, чтобы мой пользователь потерял все данные, которые он уже ввел. Как я могу заполнить форму этими данными. Должен ли я использовать FormEventListener?

public function register(Request $request, RegisterHandler $registerHandler, Register $register)
{
    if ($this->getUser()){
        return $this->redirectToRoute('homepage');
    }

    $form = $this->createForm(RegisterType::class, $register);

    $form->handleRequest($request);
    if ($form->isSubmitted() && $form->isValid()) {
        try{
            $registerHandler->handle($form->getData());
        }catch (UserAlreadyExistException $e){
            $this->addFlash('error', $e->getMessage());
            return $this->redirectToRoute('register');
        }catch (PasswordMatchingException $e){
            $this->addFlash('error', $e->getMessage());
            return $this->redirectToRoute('register');
        }

        return $this->redirectToRoute('homepage');
    }

    return $this->render('app/pages/login/register.html.twig', [
        'form' => $form->createView(),
    ]);
}

Мой тип формы

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('firstName', TextType::class, [
            'required' => true,
            'label' => 'Your Name',
            'attr' => [
                'class' => 'form-control',
            ]
        ])
        ->add('lastName', TextType::class, [
            'required' => true,
            'label' => 'Your Last Name',
            'attr' => [
                'class' => 'form-control',
            ]
        ])
        ->add('email', EmailType::class, [
            'required' => true,
            'label' => 'Your Email',
            'attr' => [
                'class' => 'form-control',
            ]
        ])
        ->add('password', PasswordType::class, [
            'required' => true,
            'label' => 'Your password',
            'attr' => [
                'id' => 'password1',
                'class' => 'form-control',
            ]
        ])
        ->add('passwordConfirm', PasswordType::class, [
            'required' => true,
            'label' => 'Confirm password',
            'attr' => [
                'id' => 'password2',
                'class' => 'form-control',
            ]
        ])
    ;

    $builder->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event) {
        $data = $event->getData();
        $form = $event->getForm();

        //@TODO
    });
}

public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults([
        'data_class' => Register::class,
    ]);
}

Поскольку вы уже находитесь в / register, нет необходимости перенаправлять. Просто удалите перенаправления, чтобы «зарегистрировать» маршрут, и он должен работать. Вы не можете перенаправлять и хранить данные публикации одновременно. События формы не нужны.

mblaettermann 23.10.2018 09:58
JS - События опций формы
JS - События опций формы
В продолжение предыдущей статьи CSS - стили, связанные с вводом формы , в этой статье мы будем использовать JS для взаимодействия с формами, на этот...
CSS - Стили, связанные с вводом формы
CSS - Стили, связанные с вводом формы
Общими стилями ввода для форм являются Input (включая Text, Radio, checkbox), Select и Textarea, из которых Input относительно прост, поэтому в этой...
Создание многостраничной формы заявления о приеме на работу с помощью Angular
Создание многостраничной формы заявления о приеме на работу с помощью Angular
Наличие на корпоративном сайте форм заявлений о приеме на работу, или "трудовых анкет", экономит время и деньги как для соискателей, так и для...
0
1
42
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Откуда берутся исключения PasswordMatchingException и UserAlreadyExistException?

Обычно вы используете ограничение или пишете свой собственный валидатор, тогда $ form-> isValid () будет ложным, и форма будет отображаться снова с теми же данными и отображать ошибки. Для UserAlreadyExistException вы должны использовать @UniqueEntity ("электронная почта"), а для паролей вы должны использовать RepeatedType.

Другие вопросы по теме