Symfony проверка формы от AJAX рендера - PullRequest
0 голосов
/ 17 марта 2020

Я новичок в symfony, я визуализирую формы на всем протяжении JSON, поэтому всякий раз, когда я нажимаю на иконку, отображаются разные формы (для изменения имени, фамилии ...). Я возвращаю эти формы в виде JSON:

    public function profileSettings()
{
    $user = $this->getUser();

    // Formulaire d'informations concernant le compte

    $formAccountSettings = $this->createForm(AccountSettingsType::class, $user, [
        'userEmail' => $user->getEmail(),
        'userUsername' => $user->getUsername(),
    ]);

    // Formulaire d'informations personnel

    $formPersonnalSettings = $this->createForm(PersonnalSettingsType::class, $user, [
        'userFirstname' => $user->getFirstname(),
        'userLastname' => $user->getLastname(),
    ]);

    // Retour en format JSON des 3 requêtes sous tableau

    return $this->json(
        [
            'formAccountSettingsView' =>
                $this->render('user/_accountSettings.html.twig', [
                    'form' => $formAccountSettings->createView(),
                ]),

            'currentUser' => $user,

            'formPersonnalSettingsView' => $this->render('user/_accountSettings.html.twig', [
                'form' => $formPersonnalSettings->createView(),
            ]),
        ]
    );
}

Вот как я отображаю это:

    $('#settings-user li').on('click', function (e) {
    $.ajax({
        type: 'GET',
        url: "/website-skeleton/public/index.php/json/profile",
        success: function (response) {
            if ($(e.target).hasClass('profile')) {
                $('.display').empty().append(
                    `
                           <p id="welcome">Bonjour, <em><strong>${response['currentUser']['username']}</strong></em> vous êtes enregistré sous le nom de <strong>${response['currentUser']['firstname']} ${response['currentUser']['lastname']}</strong>.
                               <br>
                               Votre adresse email est : <strong>${response['currentUser']['email']}</strong>.
                               <br>
                               Pour modifiez vos informations veuillez cliquez sur le menu de navigation.
                           </p>`);
            } else if ($(e.target).hasClass('security')) {
                $('.display').empty().append(response['formAccountSettingsView']['content']);
            } else if ($(e.target).hasClass('informations')) {
                $('.display').empty().append(response['formPersonnalSettingsView']['content'])
            }
        }
    })
});

Проблема сейчас в том, что я не знаю, как обрабатывать эти формы от другого контроллера и проверьте его с помощью ограничений, которые я установил для своей сущности Пользователь Вот как я проверяю:

public function editCredentials(Request $request, UserPasswordEncoderInterface $encoder)
{
    $user = $this->getUser();

    $formPersonnalSettings = $this->createForm(PersonnalSettingsType::class, $user);

    if ($request->isMethod('POST')) {
        if ($request->request->has('personnal_settings')) {
            if ($formPersonnalSettings->isSubmitted() && $formPersonnalSettings->isValid()) {
                $user->setFirstname($request->request->get('personnal_settings')['firstname']);
                $user->setLastname($request->request->get('personnal_settings')['lastname']);

                $em = $this->getDoctrine()->getManager();
                $em->persist($user);
                $em->flush();
                $this->addFlash('personnal_success', 'Vos informations personnels ont bien été enregistrées !');
                return $this->redirectToRoute('user_profile');
            }
        }

Это хороший метод? я должен справиться со всем с ajax? Спасибо за ваше время!

1 Ответ

0 голосов
/ 17 марта 2020

Вы должны использовать handlerequest, который автоматически устанавливает значения в форме для сущности, добавленной к ней после отправки формы.

$form = $this->createCreateForm($entity); // private function to create the form
$form->handleRequest($request);

if ($form->isSubmitted()) {
    if ($form->isValid()) {
        $em->persist($entity);

        $em->flush();
    }
}

return $response;

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

Если я хорошо помню, утверждения, установленные для сущности, также автоматически обрабатываются с помощью handleRequest(), это зависит от того, как вы их объявили.

Йо также может добавить другие ошибки после отправки, просто добавьте их между isSumbmitted() и isValid(). Документация

Я оставляю здесь некоторую документацию, которая может помочь.

Обработка запроса

Проверка

Проверка в самой форме

...