【问题标题】:Multiple Forms on one page in Symfony3Symfony3 中的一页上的多个表单
【发布时间】:2016-08-24 21:05:29
【问题描述】:

在 Symfony 3 中是否有一种解决方案可以在一个页面上处理多个表单?

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

我在页面上有多个 handleRequest,每个对应一个表单

$form->handleRequest($request);

...

$secondform->handleRequest($request);

我想我可能需要检查提交的表单,但是

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

为两种形式提供相同的名称,因此这不起作用。

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

【问题讨论】:

  • 可能重复:stackoverflow.com/questions/23994563/… 如果给定的解决方案不适合您,请分享您的一些代码。
  • 你也可以给你的提交按钮起不同的名字并关闭它:symfony.com/doc/current/book/…
  • 该解决方案不像 Symfony2 那样有效,我仍在寻找在 Symfony3 中为表单命名的可能性。我尝试使用 $request->request->get($form->getName()) 来确定是否在请求中提交了一个表单,但要做到这一点,每个表单都需要有一个唯一的名称,并且所有表单都属于“表格”的名称。

标签: forms symfony


【解决方案1】:

我在处理一个页面上的多个动态生成的表单时遇到了这个问题。 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() 时感到很奇怪。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多