Symfony嵌入编辑控制器无法正常工作

时间:2018-06-01 15:23:44

标签: forms symfony controller render

我正在尝试在模式中创建一个编辑表单,但此编辑表单在上下文中不起作用。

当我在使用URI地址的网页中尝试使用表单时,它正在工作,但当我在页面上下文中尝试它时,它不是。我要解释一下......

在我的网页上,我有render controller

    <div class="card">
        <div class="body">
            {{ render(controller('AppBundle:Classeur3:vacation', {'request':app.request , 'id': zone.id})) }}
        </div>
    </div>

此控制器检索somme实体并显示如下表:

<table id="sites-list" class="table table-bordered datatable">
    <thead>
        <tr>
            <th>Employé</th>
            <th>Heure d'entrée</th>
            <th>Heure de sortie</th>
            <th>Durée</th>
            <th>Actions</th>
        </tr>
    </thead>
    <tbody>
        {% for v in vacations %}
            <tr id="tr-vacation-{{ v.id }}">
                <td>{{ v.user }}</td>
                <td>{{ v.entryTime|date }}</td>
                <td>{{ v.exitTime|date }}</td>
                <td>{{ v.totalTime }}</td>
                <td style="width: 150px;">
                    <button onclick="$('#modal').modal({remote: '{{ path('edit_vacation', {'id': v.id}) }}' });" type="button" class="btn btn-circle waves-effect waves-circle waves-float" style="margin-right: 5px;">
                        <i class="material-icons">search</i>
                    </button>
                </td>
            </tr>
        {% endfor %}
    </tbody>
</table>

我的edit_vacation资源是通过以下途径定义的:

edit_vacation:
    path:     /vacation/{id}/edit
    defaults: { _controller: AppBundle:Classeur3:editVacation }

这是我的控制器功能:

public function editVacationAction(Request $request, $id){

    $vacation       = $this->getDoctrine()->getRepository(Answ31Vacation::class)->find($id);
    $form           = $this->createForm(Answ31VacationType::class, $vacation);
    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {

        $entityManager = $this->getDoctrine()->getManager();
        $entityManager->persist($vacation);
        $entityManager->flush();

        //Message
        $this->addFlash('success', 'Vacation mise à jours');

        //Redirect to Zone edit page
        return $this->redirectToRoute('zone_edit', array('id' => $vacation->getZone()->getId()));
    }

    return $this->render('AppBundle:Classeur3:edit_vacation.html.twig', array(
        "form" => $form->createView()
    ));
}

以下是我的观点:

    <div class="modal-body">
        <div class="row">
            <div class="col-sm-12">
                {{ form(form) }}
            </div>
        </div> 
    </div>
    <div class="modal-footer">
        <button type="button" class="btn btn-link waves-effect" data-dismiss="modal">Fermer</button>
    </div>

完美显示模态,但是当我提交表单时,页面将按计划重新加载,但数据不会更新。 当我尝试直接在URL中调用我的资源(baseurl / vacation / 1 / edit)时,我有表格并且修改正常,当我按下提交按钮时数据会更新。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

editVacationAction中,您应该尝试设置表单的目标操作,例如

$form = $this->createForm(Answ31VacationType::class, $vacation, ["action"=>$this->generateUrl('edit_vacation']);

但是当你提交时,页面会发生变化,如果没有额外的JavaScript,你将会松开模态。