У меня есть таблица сущностей, где каждая строка имеет содержимое и кнопки для редактирования и удаления сущности в этой строке. Я пытаюсь связать кнопку с ссылкой на маршрут в моем контроллере, а также открыть модальное окно. Однако при наличии 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>
@pedramshabani извините, не знаю, о чем вы спрашиваете. какой код вы имеете в виду?
Как вы отправляете данные на контроллер. Вы используете ajax?
на данный момент в контроллер отправляется только идентификатор объекта с помощью html-ссылки. Прежде чем попробовать эту реализацию, она была отправлена через jquery
У вас есть три способа отправки данных в php. 1-ajax 2-использование действия формы 3-использование метода Get. Я вижу, что вы использовали метод Get для отправки идентификатора. Что насчет данных Textarea?
для текстовой области это $request->get('content')






если вы не используете 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>
Почему у вас нет действия формы в модальном режиме? а почему пользователь не может видеть предыдущие данные в textarea?