Есть кнопка ссылки на маршрут контроллера Symfony и открыть модальный - PullRequest
0 голосов
/ 02 марта 2019

У меня есть таблица сущностей, в которой каждая строка имеет содержимое, и кнопки для редактирования и удаления сущности в этой строке.Я пытаюсь, чтобы кнопка связывала и ссылку на маршрут в моем контроллере, и открывала модальное окно.Однако при наличии data-toggle и data-target кнопка не будет привязана к функции маршрута.Ссылка на маршрут работает, если я не открываю модальный.Причина, по которой я хочу связать новый маршрут, состоит в том, чтобы создать форму Symfony для редактирования в отдельной функции, а не в форме создания.

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

/**
 * @Route(name="editAnnouncement", path="/admin/announcements/edit/{announcementId}", methods={"GET"})
 * @param Request $request
 * @param string  $announcementId
 * @return Response
 * @throws \Doctrine\ORM\NoResultException
 * @throws \Doctrine\ORM\NonUniqueResultException
 */
public function editAnnouncementAction(Request $request, string $announcementId)
{
    die(dump("edit function is running"));
    $form = $this->createForm(FormType::class)
        ->add('edit', SubmitType::class, array(
            'label' => ' Save changes',
            'attr' => ['class' => 'btn btn-primary']
        ))
    ;

    $form->handleRequest($request);

    $currentUser = $this->getUserFromAuth($this->getDoctrine()->getManager(), $this->getUser());
    $em = $this->getDoctrine()->getManager();


    if ($form->get('edit')->isClicked() and $form->isValid()) {
        $announcementToEdit = $em->getRepository(Announcement::class)
            ->find($announcementId);
        $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');

    }

    return $this->render(
        'Admin/_fragments/announcementEditModal.html.twig',
        [
            'form' => $form->createView()
        ]
    );

}

Соответствующий код изОсновной шаблон Twig, который отображает таблицу

td class="float-right">
                        <div class="dropdown">
                            <button class="btn btn-link"
                                type="button"
                                data-toggle="dropdown"
                                aria-haspopup="true"
                                aria-expanded="false"
                            >
                                <span class="fa fa-ellipsis-v"></span>
                            </button>
                            <div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
                                <a
                                        role="button"
                                        href="{{ url('editAnnouncement', {'announcementId': announcement.id}) }}"
                                     class="btn btn-sm dropdown-item edit-button" data-toggle="modal" data-target="#announcementEditModal-{{ announcement.id }}" data-content="{{ announcement.content }}">
                                    <div class="announcement-actions">
                                        <span class="fas fa-pencil-alt mr-1"></span>Edit announcement
                                    </div>
                                </a>

                                <button
                                    class="btn btn-sm dropdown-item delete-announcement-button"  data-toggle="modal" data-target="#delete-announcement-modal-{{ announcement.id }}"  type="button">
                                    <div class="announcement-actions">
                                        <span class="fa fa-trash btn-link mr-1"></span>Delete announcement
                                    </div>
                                </button>

                            </div>
                        </div>
                    </td>

Модальный шаблон редактирования, в котором я хочу визуализировать форму.

<div class="modal fade" id="announcementEditModal-{{ announcement.id }}" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-dialog modal-lg" role="document">
    <div class="modal-content">
        <div class="modal-header announcement-header">
            <h5 class="modal-title"><span class="fas fa-edit"></span> Edit new announcement</h5>
        </div>
        <div class="announcement-card-header card m-3 border-0">
            <div class="announcement-card-header card-body border-0 p-1">
                <span class="fa fa-info-circle fa-lg header-icon"></span>
                <h5 class="align-header">ANNOUNCEMENT TEXT</h5>
            </div>
            <div class="announcement-card-body modal-body card border-0">

                <div class="announcement-card-body">


                    <label for="exampleInputEmail1">ANNOUNCEMENT (SUPPORTS MARKDOWN)</label>
                    <textarea
                            class="form-control"
                            id="editAnnouncementText"
                            rows="5"
                            name="content"
                            form="edit-form"
                            maxlength="2000"
                    >
                    </textarea>
                </div>
            </div>
        </div>
        <div class="card-footer border-0 bg-white pt-0">
            <div>
                <a
                        href="{{ url('editAnnouncement', {'announcementId': announcement.id}) }}"
                    class="btn btn-primary"
                        role="button"
                >
                    <span class="fa fa-check mr-1"></span>Save changes
                </a>

                <button type="button" class="btn btn-light" data-dismiss="modal" aria-label="Close">
                    Cancel
                </button>
            </div>
        </div>
    </div>
</div>

1 Ответ

0 голосов
/ 05 марта 2019

, если вы не используете Ajax.Вы должны использовать данные формы. Когда вы пытаетесь отправить данные на контроллер

<form action="{{ url('editAnnouncement', {'announcementId': announcement.id}) }}" method="POST">
<div class="announcement-card-body modal-body card border-0">
    <div class="announcement-card-body">
        <label for="exampleInputEmail1">ANNOUNCEMENT (SUPPORTS MARKDOWN)</label>
        <textarea class="form-control"  id="editAnnouncementText"  rows="5" name="content" form="edit-form" maxlength="2000"></textarea>
    </div>
</div>
</div>
<div class="card-footer border-0 bg-white pt-0">
    <div>
        <button type="submit"  name="edit" class="btn btn-primary"> <span class="fa fa-check mr-1"></span>Save changes</button>
        <button type="button" class="btn btn-light" data-dismiss="modal" aria-label="Close">
            Cancel
        </button>
    </div>
</div>
</form>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...