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