在Symfony2中为删除表单添加“confirm-option”的最佳方法是什么?

时间:2012-12-12 08:23:16

标签: symfony controller crud confirm

如果使用控制台在Symfony2中为实体创建CRUD代码,最终将获得一个非常基本的删除功能。

此功能精简高效,但不提供“你确定吗?” - 确认。如果要删除的实体存在,则会立即删除。

有没有人建议添加用户确认的最简单方法?

到目前为止,我一直在使用:

  • 额外的控制器功能
  • 的jQuery

虽然Symfony2没有内置选项,但似乎有点奇怪。有没有更好的想法?

4 个答案:

答案 0 :(得分:8)

您还可以使用其他属性呈现表单的基本删除字段:

在你的树枝模板中:

{{ form(delete_form, {'attr': {'onclick': 'return confirm("Are you sure?")'}}) }}

答案 1 :(得分:7)

只需在删除链接上使用确认javascript功能

<a href="{{ path('delete_route', {csrf:...}) }}" onclick="return confirm('are u sure?')">delete</a>

答案 2 :(得分:3)

问题:

{{ form(delete_form, {'attr': {'onclick': 'return confirm("Are you sure?")'}}) }}

是否会导致弹出双重确认框。更好的解决方案是将它放在deleteForm上的控制器中......

private function createDeleteForm($id)
{
    return $this->createFormBuilder()
        ->setAction($this->generateUrl('my_controller_delete', array('id' => $id)))
        ->setMethod('DELETE')
        ->add('submit', 'submit', array('label' => 'Delete',
                'attr' => array(
                        'onclick' => 'return confirm("Are you sure?")'
                )))
        ->getForm();
} 

然后onclick功能在按钮而不是表单上。

答案 3 :(得分:0)

轻量级解决方案是实际显示两次表单: 首先,用户填写所有字段。然后我们认识到它尚未被确认,所以我们重新渲染它。这次javascript立即显示确认对话框。

为此,我们在表单中添加了一个隐藏字段confirmed,并为树枝渲染添加了一个参数:

$builder = $this->createFormBuilder(...);
$builder->add('confirmed', HiddenType::class, ['mapped' => false]);

$form = $builder->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {

    if($form->get('confirmed')->getData() != true) { 
        // re-render with confirmation flag set
        return $this->render('default/form.html.twig', [
             'form' => $form->createView(),
             'confirm' => true]);
    }
} else {
    return $this->render('default/form.html.twig', [
         'form' => $form->createView(),
         'confirm' => false]);
}

在你的模板中添加如:

的javascript
{{ form_start(form) }}
{{ form_widget(form) }}
{{ form_end(form) }}

<script>
$(document).ready(function () {
    var c = confirm('Really sure?');
    if(c) {
        $('#form_confirmed').val(true);
        $('form')[0].submit();

    }
});
</script>