我想做的很简单。我有第一张表格。提交此表单时,我有另一个表单。提交第二个表单时,我想执行一些操作。
所以这是我的控制器简化:
$app->post('/path', function(Request $request) use ($app) {
$app['request'] = $request;
$token = $app['security.token_storage']->getToken();
if (null !== $token) {
$user = $token->getUser();
// First form
$form = $app['form.factory']->createBuilder(FormType::class)
->add('field_form1', TextType::class, [
'required' => true,
])
->getForm();
// Second form
$formcb = $app['form.factory']->createBuilder(FormType::class)
->add('field_form2', TextType::class, [
'required' => true,
])
->getForm();
// When second form is submitted
$formcb->handleRequest($request);
if($formcb->isSubmitted() && $formcb->isValid()) {
// isValid is never true
$data = $formcb->getData();
}
// When first form is submitted
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid()) {
$data = $form->getData();
switch ($data["paiementType"]) {
[...]
case 'mycase':
// Render of the second form
return $app['twig']->render('page2.twig', [
'form' => $formcb->createView(),
]);
default: break;
}
}
// Render of the first form
return $app['twig']->render('page1.twig', [
'form' => $form->createView(),
]);
}
})->bind('path');
但是,
第一种形式没有问题,效果很好。
第二种形式似乎在渲染时已经过验证,因为字段错误消息显示在表单上。
当我提交第二个表单时,我从不输入if($ formcb-> isSubmitted()&& $ formcb-> isValid()){子句,因为isValid永远不会为真。 ..但是,表格已提交......
所以我不知道出了什么问题,也许这不是在另一个表单后面呈现表单的好方法......