如果您使用控制台为 Symfony2 中的实体创建 CRUD 代码,您最终将得到一个非常基本的删除功能。
此功能简洁高效,但不提供“您确定吗?”-确认。如果要删除的实体存在,将立即删除。
有人对添加用户确认的最简单方法有建议吗?
到目前为止,我一直在使用:
- 额外的控制器功能
- jQuery
虽然 Symfony2 没有内置选项,但这似乎有点奇怪。有更好的想法吗?
如果您使用控制台为 Symfony2 中的实体创建 CRUD 代码,您最终将得到一个非常基本的删除功能。
此功能简洁高效,但不提供“您确定吗?”-确认。如果要删除的实体存在,将立即删除。
有人对添加用户确认的最简单方法有建议吗?
到目前为止,我一直在使用:
虽然 Symfony2 没有内置选项,但这似乎有点奇怪。有更好的想法吗?
您还可以使用附加属性呈现表单的基本删除字段:
在你的树枝模板里面:
{{ form(delete_form, {'attr': {'onclick': 'return confirm("Are you sure?")'}}) }}
只需在删除链接上使用确认 javascript 功能
<a href="{{ path('delete_route', {csrf:...}) }}" onclick="return confirm('are u sure?')">delete</a>
一个问题:
{{ 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功能在按钮而不是表单上。
一个轻量级的解决方案是实际显示您的表单两次:首先,用户填写所有字段。然后我们认识到它还没有被确认,所以我们重新渲染它。这次 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>