添加“a”的最佳方式是什么;“确认选项”;是否在Symfony2中删除表单?

添加“a”的最佳方式是什么;“确认选项”;是否在Symfony2中删除表单?,symfony,controller,crud,confirm,Symfony,Controller,Crud,Confirm,如果使用控制台在Symfony2中为实体创建CRUD代码,则最终将得到一个非常基本的删除函数 此功能精简高效,但不提供“确定吗?”-确认。如果要删除的实体存在,将立即删除该实体 是否有人对添加用户确认的最简单方法提出了建议 到目前为止,我一直在使用: 额外的控制器功能 jQuery 虽然Symfony2没有内置选项,但这似乎有点奇怪。有更好的主意吗?只需在删除链接上使用确认javascript函数即可 <a href="{{ path('delete_route', {csrf:...

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

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

是否有人对添加用户确认的最简单方法提出了建议

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

  • 额外的控制器功能
  • jQuery

虽然Symfony2没有内置选项,但这似乎有点奇怪。有更好的主意吗?

只需在删除链接上使用确认javascript函数即可

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

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

在细枝模板中:

问题在于:

{form(delete_form,{'attr':{'onclick':'return confirm(“你确定吗?”)}}}}

这会导致弹出一个双重确认框。更好的解决方案是将其放置在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函数将取代表单。

轻量级解决方案是实际显示表单两次: 首先,用户填写所有字段。然后,我们认识到它尚未得到确认,因此我们重新渲染它。这一次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>
{{form_start(form)}
{{form_widget(form)}
{{form_end(form)}}
$(文档).ready(函数(){
var c=确认('真的确定?');
如果(c){
$(“#表#确认”).val(真);
$('form')[0]。提交();
}
});

为什么jQuery或简单的Javascript不适合您?是的,但我可以想象Symfony2会有一个内置选项。我想还没有,javascript是最好的选择。我建议javascript确认,如果数据很重要,可以使用softdelete扩展,这样实体就不会完全从数据库中删除。好的,谢谢Mike,我会按照你的建议构建它。因此,请考虑你的答案;我使用了这种方法,但是在表单中的div中,渲染是重复的onclick,使得click显示消息两次。
{{ 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>