我是第一次使用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');
}
答案 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