我有一个Twitter Bootstrap表,其中每一行都是一个单独的公告。每行都有一个按钮,该按钮会打开一个Bootstrap下拉菜单,其中包含两个按钮:“编辑公告”和“删除公告”。单击编辑按钮将打开一个模式,用户可以在其中编辑由Symfony表单提交的公告文本。我当前的实现是通过jQuery发送公告的ID,因此Smyfony控制器知道要在数据库中编辑哪个公告。
但是现在我试图通过传递“公告ID”来为模式指定唯一ID。但是,该模式位于其自己的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');
}
答案 0 :(得分:3)
我建议您更新模式,而不要重复表格。
像这样
$.ajax({
url: "{{ path('your_controller_route') }}",
success: function(data) {
$('#delete-announcement-modal').replaceWith($(data).find('#delete-announcement-modal'));
$('#delete-announcement-modal').modal('show');
}
});
也许需要一些调整