删除Symfony2中的数据

时间:2015-02-13 05:33:33

标签: php symfony

delete options in each row

我有像这样删除每行的选项。我使用GET方法成功删除了数据但是如何使用相同的布局在POST / DELETE方法中删除? GET方法是否可以安全删除?

2 个答案:

答案 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方法是否可以安全删除?

我认为使用GETPOSTDELETE更安全。无论使用何种方法,您仍然需要在防火墙或控制器中添加规则,以确保用户有权删除某些内容。

您可以声明删除实体实例的特定路线,而不使用任何形式:

/**
 * @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>