如何在没有JS的情况下确认删除Symfony 3.4中表格提交的条目



我正在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的最佳选择吗?

创建一个删除的用户ID(或名称,无论什么(数组

if ($form->isSubmitted() && $form->isValid()) {
$users = $form->getData();
// create an empty array
$removed = [];
foreach($users as $user) { // I assume you do this here?
// Add confirmation here...
$removed[] = $user->getId(); // add to array (or whatever, username, etc)
$this->deleteUsers($user);
}
// now pass to your view
return $this->render('AppBundle::user_list.html.twig', [
'form' => $form->createView(),
'removed' => $removed,
]);
}

然后,您可以创建一个警报框或其他包含要显示的信息的div。

希望这能有所帮助!:-(

我建议您有一个单独的删除和删除确认路径(单一责任(。然后,从删除路径,将必须删除的实体的ID列表传递到删除确认路径。查看此问题以了解更多详细信息:如何在Symfony 3中的不同页面上在不同表单之间传递数据/信息?

最新更新