Иметь ссылку кнопки на маршрут контроллера Symfony и открыть модальный

У меня есть таблица сущностей, где каждая строка имеет содержимое и кнопки для редактирования и удаления сущности в этой строке. Я пытаюсь связать кнопку с ссылкой на маршрут в моем контроллере, а также открыть модальное окно. Однако при наличии 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>

Почему у вас нет действия формы в модальном режиме? а почему пользователь не может видеть предыдущие данные в textarea?

pedram shabani 02.03.2019 07:10

@pedramshabani извините, не знаю, о чем вы спрашиваете. какой код вы имеете в виду?

d1596 04.03.2019 18:47

Как вы отправляете данные на контроллер. Вы используете ajax?

pedram shabani 04.03.2019 19:09

на данный момент в контроллер отправляется только идентификатор объекта с помощью html-ссылки. Прежде чем попробовать эту реализацию, она была отправлена ​​​​через jquery

d1596 04.03.2019 19:41

У вас есть три способа отправки данных в php. 1-ajax 2-использование действия формы 3-использование метода Get. Я вижу, что вы использовали метод Get для отправки идентификатора. Что насчет данных Textarea?

pedram shabani 04.03.2019 20:13

для текстовой области это $request->get('content')

d1596 04.03.2019 23:51
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
6
1 408
1

Ответы 1

если вы не используете 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>

Другие вопросы по теме