在具有唯一ID的模态中渲染同一Symfony表单的多个版本

时间:2019-02-27 22:04:29

标签: php symfony twig

我有一个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');
    }

1 个答案:

答案 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');
        }
});

也许需要一些调整