У меня есть две формы в моем контроллере
public function index($id, Request $request, UserPasswordEncoderInterface $passwordEncoder)
{
$user = $this->getDoctrine()
->getRepository(User::class)
->find($id);
// First form for edit User //
$form = $this->createForm(EditUserType::class, $user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$user = $form->getData();
$em = $this->getDoctrine()
->getManager();
$em->persist($user);
$em->flush();
$this->addFlash('notice', 'User profile has been updated');
return $this->redirectToRoute('user_list');
}
// Second form for edit password //
$form2 = $this->createForm(ChangePasswordType::class, $user);
$form2->handleRequest($request);
if ($form2->isSubmitted() && $form2->isValid()) {
$user->setPassword(
$passwordEncoder->encodePassword(
$user,
$form2->get('password')->getData()
)
);
$user = $form2->getData();
$em = $this->getDoctrine()
->getManager();
$em->persist($user);
$em->flush();
$this->addFlash('notice', 'User password has been updated');
return $this->redirectToRoute('edit_user', [
'id' => $id
]);
}
return $this->render('desktop/editUser.twig', [
'formPassword' => $form2->createView(),
'form' => $form->createView(),
]);
}
Я передаю его для просмотра:
<div class="row">
<div class="col-md-8 mx-auto">
<button type="button" class="btn btn-primary content-margin-top-bot password-button" data-toggle="modal" data-target="#myModal"> Password change </button>
<h2>Edit user</h2>
{{ form_start(form)}}
{{ form_widget(form)}}
{{ form_end(form)}}
</div>
</div>
<div class="row justify-content-center ">
<div class="col-md-9">
<!-- The Modal -->
<div class="modal" id="myModal">
<div class="modal-dialog">
<div class="modal-content">
<!-- Modal Header -->
<div class="modal-header">
<h4 class="modal-title">Change password</h4>
<button type="button" class="close" data
dismiss="modal">×</button>
</div>
<!-- Modal body -->
<div class="modal-body">
{{ form_start(formPassword) }}
{{ form_widget(formPassword)}}
{{ form_end(formPassword) }}
</div>
<!-- Modal footer -->
<div class="modal-footer">
<button type="button" class="btn btn-danger" data-
dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
</div>
</div>
И это мой ChangePasswordType:
class ChangePasswordType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('password', RepeatedType::class, [
'constraints' => [
new NotBlank(),
],
'type' => PasswordType::class,
'required' => true,
'first_options' => ['label' => 'New password'],
'second_options' => ['label' => 'Repeat password', ],
'invalid_message' => 'Passwords must be identical',
])
->add('change password', SubmitType::class);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => User::class,
]);
}
}
ИМой вопрос заключается в том, что эта форма не проверена должным образом, когда я открываю форму в модальном режиме, я могу редактировать пароль, но нет проверки, если я введу 2 разных пароля, модальный режим закрыт и выглядит так, как будто пароль был изменен, но это не так.Только когда я снова открываю модальную форму, я получаю информацию «Пароли должны быть идентичны».Как правильно проверить эту форму?