如何在没有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中最好的选择吗?

dhtz125 回答:如何在没有JS的情况下确认删除Symfony 3.4中的表单提交的实体?

创建一个删除的用户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列表传递到删除确认路径。 请查看此问题以获取更多详细信息:How to pass data/information between different forms on diffrent pages in Symfony 3?

本文链接:https://www.f2er.com/3100773.html

大家都在问