Symfony3中的一个页面上有多个表单

时间:2016-04-29 15:58:31

标签: forms symfony

Symfony 3中是否有处理多个表单的解决方案?

它基本上可以正常工作,但提交一个表单以另一个表单的空值结束,因为所有表单似乎都具有相同的名称(表单)。

我在页面上有多个handleRequests,每个都有一个表单

$form->handleRequest($request);

...

$secondform->handleRequest($request);

我想我需要有可能检查提交的表格,但

$request->request->get($form->getName())

为两个表单指定相同的名称,因此不起作用。

是否有解决方案来处理多个表单或者更改每个表单的名称?

1 个答案:

答案 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()时,我感到很奇怪。