Symfony表单提交并从另一种方法验证

时间:2017-04-04 13:15:12

标签: php ajax forms symfony php-7

我已经在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); ...

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

2 个答案:

答案 0 :(得分:0)

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

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(),
    ]);
}

答案 1 :(得分:0)

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

这是更好的可读代码,并且使用浏览器的历史记录按钮可以更好地工作。 (减少缓存问题)此外,您当然可以简单地更改HTML <form>元素的“action”属性。请点击此链接阅读如何:http://symfony.com/doc/current/form/action_method.html