【发布时间】:2019-11-14 16:44:00
【问题描述】:
我正在Symfony 3.4 中处理一个简单的表单,它允许在表单中选择任意数量的实体进行删除。
在不使用 JS 的情况下要求用户确认删除的最佳/正确方法是什么?
class SomeController {
public function deleteUsersAction(Request request) {
$users = $this->loadUsersFromDB();
$form = $this->creatFormBuilder()
->add('users', EntityType::class, [
'class' => 'AppBundle:User',
'choices' => $users,
'multiple' => true,
'expanded' => true,
])
->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$users = $form->getData();
// Add confirmation here...
$this->deleteUsers($user);
}
return $this->render('AppBundle::user_list.html.twig', ['form' => $form->createView()]);
}
}
当然,我可以使用一些 JS(或其他脚本代码)来拦截表单提交,显示确认对话框,然后才将数据提交给处理表单和删除的控制器。
但是,这不是我正在寻找的解决方案。必须首先检查提交的实体/用户,如果甚至可以删除。因此,控制器应该检查实体,然后将用户发送到确认页面。
如何将选定的实体传递给确认页面,然后最终传递给处理删除的控制器?
我的第一个意图是为确认页面创建一个表单,该表单可以包含所选实体的input hidden 字段。但是hidden 字段不能存储实体(或者它们可以),我将创建一个自定义表单类型来处理转换(实体到 id -> id 到实体)或在控制器中手动进行转换。
第二个猜测是像以前一样使用EntityType,但只是使用 CSS 隐藏表单字段。然而,这些似乎不是一个干净的解决方案。
我发现了一些来自 Symfony 2 的旧帖子,它们建议使用自定义表单类型。这仍然是 Symfony 3 中的最佳选择吗?
【问题讨论】: