所以我从CRUD生成器复制了基本删除操作:
/**
* @Route("category/delete/{id}", name="category_delete")
* @Method("DELETE")
*/
public function deleteAction(Request $request, $id)
{
$repository = $this->getDoctrine()->getRepository('AppBundle:Category');
$category = $repository->find($id);
$form = $this->createDeleteForm($category);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->remove($category);
$em->flush();
}
return $this->redirectToRoute('category_index');
}
/**
*
* @param Category $category
*
* @return \Symfony\Component\Form\Form The form
*/
private function createDeleteForm(Category $category)
{
return $this->createFormBuilder()
->setAction($this->generateUrl('category_delete', array('id' => $category->getId())))
->setMethod('DELETE')
->getForm()
;
}
Run Code Online (Sandbox Code Playgroud)
但是,我不确定如何实际使用动作本身.我想在两个地方删除,我不确定正确的方法:
<a href="{{ path('category_edit', {'id': cat.id}) }}" class="btn btn-default">Edit</a>),但这不适用于删除操作.我已经尝试过查看Symfony演示应用程序,但我仍然没有完全掌握删除操作的工作原理 - 我在文档中找不到任何内容.
有人可以简要说明删除操作对1和2的工作原理吗?
删除脚本Symfony CRUD与表单提交一起使用.因此,您必须呈现一个表单以显示删除按钮.
您可能会犹豫为列表中的每个项目呈现表单.它也不方便从内部编辑表格中嵌入.
在Bootstrap模式(确认删除框)和ajax提交的帮助下,我遇到了这个解决方案:
deleteAction支持,GET以便它可以在必要时呈现表单.deleteAction控制器以在模态体的一侧渲染表单.您也可以在模式中输入确认消息.deleteAction脚本,然后重定向.编辑:为Controller和添加脚本Template
/**
* @Route("category/delete/{id}", name="category_delete")
* @Method({"GET", "DELETE"})
*/
public function deleteAction(Request $request, $id)
{
/*
* Check Permission.
*/
$response = array(
'success' => true,
'message' => '',
'html' => '',
);
$repository = $this->getDoctrine()->getRepository('AppBundle:Category');
$category = $repository->find($id);
$form = $this->createDeleteForm($category);
if ($request->getMethod() == 'DELETE') {
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->remove($category);
$em->flush();
// Get response ready as per your need.
$response['success'] = true;
$response['message'] = 'Deleted Successfully!';
} else {
$response['success'] = false;
$response['message'] = 'Sorry category could not be deleted!';
}
return new JsonResponse($response);
// In case you want to redirect.
// $this->addFlash('notice', 'Deleted Successfully!');
// return $this->redirectToRoute('category_index');
}
$render = $this->render(':category:delete_confirm.html.twig', array(
'delete_form' => $form->createView(),
'category' => $category,
));
$response['html'] = $render->getContent();
return new JsonResponse($response);
}
Run Code Online (Sandbox Code Playgroud)
Twig HTML代码返回Modal(我使用的是UIKIT模式)
{{ form_start(delete_form) }}
<div class="uk-modal-header">
<h3 class="uk-modal-title">Delete this Category?</h3>
</div>
<p>
Are you sure you want to delete '{{ category.name }}'?<br/>
This cannot be undone.
</p>
<div class="uk-modal-footer uk-text-right">
<div>
<button type="submit" class="md-btn md-btn-danger" title="Click to proceed!">
<i class="uk-icon-trash"></i> Delete
</button>
<button type="button" class="md-btn md-btn-warning uk-modal-close">Cancel</button>
</div>
</div>
{{ form_end(delete_form) }}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!