【问题标题】:Symfony form submit and validate from another methodSymfony 表单从另一种方法提交和验证
【发布时间】:2023-04-06 16:24:02
【问题描述】:

我在 Ajax 请求后创建了一个表单(在提交第一个表单 (Test1Type) 之后)

public function indexAction(Request $request): Response
{
    $form = $this->createForm(Test1Type::class);
    $form->handleRequest($request);

    if ($request->isXmlHttpRequest()) {

        $form = $this->createForm(Test2Type::class);

        return new Response($this->renderView('test/_results.html.twig', [
            'form' => $form->createView(),
        ]));
    }

    return $this->render('test/index.html.twig', [
        'form' => $form->createView(),
    ]);
}

然后我想用另一种方法从这个Test2Type提交、验证和获取数据

public function confirmAction(Request $request): Response
{
    dump($form->getData());

    return $this->render('test/confirm.html.twig', [
    ]);
}

但我无法访问我的表单变量,我不会重复使用 $form = $this->createForm(Test2Type::class);...

我认为这是可能的,但我真的没有任何线索可以完成这项工作...... 你有什么想法吗?

【问题讨论】:

    标签: php ajax forms symfony php-7


    【解决方案1】:

    这是不可能的,您必须先创建$form 变量,然后才能将其用于提交和验证。为避免创建Test2Type表单重复代码,请在表单提交并生效后重定向到indexAction中的confirmAction

    public function indexAction(Request $request)
    {
        $form = $this->createForm(Test1Type::class)->handleRequest($request);
    
        if ($form->isSubmitted() && $form->isValid()) {
            return $this->redirectToRoute('confirm.action.route_name');
        }
    
        return $this->render('test/index.html.twig', [
            'form' => $form->createView(),
        ]);
    }
    
    public function confirmAction(Request $request)
    {
        $form = $this->createForm(Test2Type::class)->handleRequest($request);
    
        if ($form->isSubmitted() && $form->isValid()) {
            return $this->render('test/confirm.html.twig', [
                'data' => $form->getData()
            ]);
        }
    
        return $this->render('test/_results.html.twig', [
            'form' => $form->createView(),
        ]);
    }
    

    【讨论】:

      【解决方案2】:

      你应该在你的控制器中为另一个路由的 ajax 请求添加另一个动作!!

      这是可读性更好的代码,与浏览器的历史按钮配合使用效果更好。 (更少的缓存问题)此外,您当然可以简单地更改 HTML <form> 元素的 'action' 属性。点击此链接阅读方法:http://symfony.com/doc/current/form/action_method.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-02-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-08
        • 2018-06-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多