我已经在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);
...
我认为这是可能的,但我真的没有任何线索来完成这项工作...... 你有什么想法吗?
答案 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)
这是更好的可读代码,并且使用浏览器的历史记录按钮可以更好地工作。 (减少缓存问题)此外,您当然可以简单地更改HTML <form>
元素的“action”属性。请点击此链接阅读如何:http://symfony.com/doc/current/form/action_method.html