Проверка формы Symfony4 в начальной загрузке - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть две формы в моем контроллере

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">&times;</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 разных пароля, модальный режим закрыт и выглядит так, как будто пароль был изменен, но это не так.Только когда я снова открываю модальную форму, я получаю информацию «Пароли должны быть идентичны».Как правильно проверить эту форму?

1 Ответ

0 голосов
/ 28 февраля 2019

Вы должны добавить некоторый дополнительный код в ваш javascript, потому что модал не будет снова открыт, если вы отправите эту форму, и она будет недействительной.

Быстрое и грязное решение для этого заключается в размещении следующего кода.

{% if not formPassword.vars.valid %}
    $('#idofyourmodal').modal('show');
{% endif % }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...