我有像这样删除每行的选项。我使用GET方法成功删除了数据但是如何使用相同的布局在POST / DELETE方法中删除? GET方法是否可以安全删除?
答案 0 :(得分:3)
要使用DELETE
方法,最好的方法是使用带有POST
方法的表单,然后使用DELETE
字段伪造_method
。然后,表单可以将表单的CSS设置为display: inline;
或display: inline-block;
。
您的"删除按钮"
<form action="{{ path('your_path') }}" method="POST" class="delete-button-form>
<input name="_method" value="DELETE" type="hidden">
<button type="submit" class="btn btn-danger">Delete</button>
</form>
你的css
form.delete-button-form {
display: inline-block;
}
您可以看到此布局的小提琴here
您还需要将配置设置为使用http方法覆盖,文档覆盖的覆盖范围比我更好。 取自here
The _method functionality shown here is disabled by default in Symfony 2.2 and
enabled by default in Symfony 2.3. To control it in Symfony 2.2, you must call
Request::enableHttpMethodParameterOverride before you handle the request (e.g.
in your front controller). In Symfony 2.3, use the http_method_override option.
答案 1 :(得分:1)
GET方法是否可以安全删除?
我认为使用GET
,POST
或DELETE
更安全。无论使用何种方法,您仍然需要在防火墙或控制器中添加规则,以确保用户有权删除某些内容。
您可以声明删除实体实例的特定路线,而不使用任何形式:
/**
* @Route(
* "/something/{id}/delete",
* name="something_delete"
* )
*/
public function somethingRemoveAction($id)
{
$something = $this->getDoctrine()
->getRepository('ACMEBundle:Something')
->find($id);
$em = $this->getDoctrine()->getManager();
$em->remove($something);
$em->flush();
// Suggestion: add a message in the flashbag
// Redirect to the table page
return $this->redirect($this->generateUrl('something_list'));
}
然后为表格的每一行创建一个按钮:
<a href="{{ path('something_delete', {'id': something.id}) }}">
<button type="button">Delete</button></a>