无法将表单方法从“发布”更改为“删除”

时间:2019-02-28 12:29:16

标签: php symfony

我是第一次使用Symfony框架工作,并且遇到了一个我自己无法解决的问题。

我在课堂上有2个动作,而且它们的路线相同。 我希望当路由方法要求的类型为“ GET”时第一个被执行,而当方法方法的类型为“ DELETE”时第二个被执行。

要调用第二个动作,我制作了一个表单元素并将其修改为可以获取“ DELETE”方法的地方。

但是表格仍然指向错误的动作。

你能看出我在哪里犯错了吗?

1-这是我模板的一部分

{% for property in properties %}
        <tr>
            <td>{{property.title}}</td>
            <td>
                <a class="btn btn-outline-dark" href="{{path('admin.property.edit', {id : property.id})}}">Editer</a>
                <form method="post" action="{{path('admin.property.delete', {id: property.id})}}">
                    <input type="hidden" name="_method" value="DELETE">
                    <input type="hidden" name="_token" value="{{csrf_token('delete'~ property.id)}}">
                    <button type="submit" class="btn btn-outline-danger">Supprimer</button>
                </form>
            </td>
        </tr>
    </tbody>
{% endfor %}

2-这些是动作:

/**
 * @Route("admin/biens/{id}", name="admin.property.edit")
 */
    public function edit(Property $property, Request $request)
    {
        $form = $this->createForm(PropertyType::class, $property);
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) 
        {
            $this->em->persist($property);
            $this->em->flush();

            return $this->redirectToRoute('admin.property.index');

        }

        return $this->render('admin/edit.html.twig',[
            'property' => $property,
             'form' =>$form->createView()
        ]);
    }

/**
 * @Route("admin/biens/{id}", name="admin.property.delete", methods={"DELETE"})
 */
    public function delete(Property $property, Request $request)
    {
        $submittedToken = $request->request->get('_token');
        if ($this->isCsrfTokenValid('delete'.$property->getId(), $submittedToken)) {

            $this->em->remove($property);
            $this->em->flush();

        }

        return $this->redirectToRoute('admin.property.index');

    }

1 个答案:

答案 0 :(得分:1)

您必须在第一条路线中设置方法:

/**
 * @Route("admin/biens/{id}", name="admin.property.edit", methods={"GET, POST"})
 */

请参见symfony文档:https://symfony.com/doc/current/routing/requirements.html#adding-http-method-requirements