Рендеринг нескольких версий одной и той же формы Symfony в модальном режиме с уникальным идентификатором - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть таблица Twitter Bootstrap, где каждая строка представляет собой отдельное объявление.В каждой строке есть кнопка, которая открывает раскрывающийся список Bootstrap с двумя кнопками «Редактировать объявление» и «Удалить объявление».При нажатии кнопки редактирования открывается модальное окно, в котором пользователь может редактировать текст объявления, отправляемого с помощью форм Symfony.Моя текущая реализация отправляет идентификатор объявления через jQuery, чтобы контроллер Smyfony знал, какой из них редактировать в базе данных.

Но сейчас я пытаюсь назначить уникальный идентификатор модалам, передав идентификатор объявления.Тем не менее, модал имеет собственный шаблон Twig, поэтому имеет доступ только к массиву всех объявлений.

В настоящее время я переместил модал в основной шаблон, но кнопки формы Symfony отображаются только в первом..

Код для модального (в основном шаблоне, который отображает таблицу)

{# Delete Modal #}
                <div class="modal fade" id="delete-announcement-modal-{{ announcement.id }}" tabindex="-1" role="dialog"  aria-hidden="true">
                    <div class="modal-dialog modal-lg" role="document">
                        <div class="modal-content">
                            <div class="modal-body">
                                {{ form_start(deleteForm) }}
                                <h1 class="modal-title">
                                    <span class="fas fa-cat"></span> Srsly delete that?
                                </h1>
                                {{ form_widget(deleteForm.id) }}
                                <button type="button" class="btn btn-primary" data-dismiss="modal" aria-label="Close">
                                    Fine. keep it.
                                </button>
                                {{ form_widget(deleteForm.delete) }}
                                {{ form_end(deleteForm) }}
                            </div>
                        </div>
                    </div>
                </div>

Код контроллера.

$editForm = $this->createForm(FormType::class)
        ->add('edit', SubmitType::class, array('label' => ' Save changes', 'attr' => ['class' => 'btn btn-primary']))
        ->add('idd', HiddenType::class, [])

$editForm->handleRequest($request);

if ($editForm->get('edit')->isClicked() and $editForm->isValid()){
        $announcementToEdit = $em->getRepository(Announcement::class)->find($editForm->getData()['idd']);
        $announcementToEdit->setContent($request->get('content'));
        $em->flush();

        $this->logger->info(
            'Announcement edited',
            [
                'user id' => $currentUser->getId(),
                'date created' => date("Y-m-d h:i:sa"),
                'announcement id' => $announcementToEdit->getId(),
            ]
        );
        return $this->redirectToRoute('admin_announcements');
    }

1 Ответ

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

Я бы посоветовал вам обновить модал, а не повторять форму.

Таким образом

$.ajax({
        url: "{{ path('your_controller_route') }}",
        success: function(data) {
            $('#delete-announcement-modal').replaceWith($(data).find('#delete-announcement-modal'));
            $('#delete-announcement-modal').modal('show');
        }
});

Возможно, необходима некоторая настройка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...