我正在使用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中最好的选择吗?