У меня есть форма регистрации.
Когда форма отправлена и действительна, происходит множество проверок, например, проверка соответствия пароля и пароля_контроль.Если нет, я перенаправляю на ту же страницу с сообщением об ошибке.
Но я не хочу, чтобы мой пользователь терял все данные, которые он уже заполнил.Как я могу заполнить форму с этими данными.Должен ли я использовать 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,
]);
}