Symfony 3中是否有处理多个表单的解决方案?
它基本上可以正常工作,但提交一个表单以另一个表单的空值结束,因为所有表单似乎都具有相同的名称(表单)。
我在页面上有多个handleRequests,每个都有一个表单
$form->handleRequest($request);
...
$secondform->handleRequest($request);
我想我需要有可能检查提交的表格,但
$request->request->get($form->getName())
为两个表单指定相同的名称,因此不起作用。
是否有解决方案来处理多个表单或者更改每个表单的名称?
答案 0 :(得分:2)
在一个页面上处理多个动态生成的表单时遇到了这个问题。 isSubmitted()
表现得并不理智,因为我相信它会根据表单名称进行检查,并且所有表单都具有相同的名称。因此,提交一份表格,使用该表格的数据更新所有表格。
我使用Form Factory的createNamed
方法解决了这个问题。
这是在Symfony v3.2.1上测试的
foreach ($aObjects as $oObject)
{
$sUniqueFormName = 'Form' . $oObject->getId(); //Use some unique data to generate the form name.
$oForm = $this->get('form.factory')->createNamed($sUniqueFormName, CustomFormType::class, $oObject);
$aForms[$sUniqueFormName] = $oForm;
}
foreach ($aForms as $sFormName => $oForm)
{
$oForm->handleRequest($oRequest);
if ($oForm->isSubmitted() && $oForm->isValid())
{
//Do stuff
}
//Create the view *after* calling handleRequest, so data is updated to the form, even if, say, there are validation errors.
$aFormViews[$sFormName] = $oForm->createView();
}
模板非常简单,只需遍历表单视图并正常呈现它们。请确保为每个表单明确输出form_end()
,但是,在使用form_rest()
时,我感到很奇怪。