单个控制器中两个表单之间的交互

时间:2016-05-23 09:22:42

标签: forms symfony

我试图在Symfony2中的单个控制器中使用两种形式。该页面显示一个电子邮件地址列表,其中包含用于选择它们的复选框。

第一个表单是研究表单,第二个表单用于删除电子邮件地址。我的页面中也有一个分页。

我的问题是,当第一页中没有显示电子邮件地址时,我无法通过研究删除电子邮件地址。

public function emailsAction(Request $request, $paginationParams)
{
    $searchForm = $this->createForm(new SearchFormType(), null, array());
    $searchForm->handleRequest($request);

    if ($searchForm->isValid()) {
        // FETCH E-MAILS WITH SEARCH
    } else{
        // FETCH E-MAILS WITHOUT SEARCH
    }

    // here I slice the result depending on the pagination params

    $removeForm = $this->createForm(new RemoveFormType(), null, array(
        'emails' => $emails
    ));
    $removeForm->handleRequest($request);

    if ($removeForm->isValid())
    {
        $formData = $removeForm->getData();

        // here I remove the e-mails
    }

    ...
    $params['remove_form'] = $manageSubscribersForm->createView();
    $params['search_form'] = $searchAbonneActuForm->createView();

    return $this->renderView('my_template.html.twig', $params);
}

如果我理解正确,问题是我的removeForm是使用拼接数组创建的,并且在处理removeForm时没有应用搜索。

当我搜索一个名字时,请说johnsmith,它会在第1页显示我,其中一个结果是johnsmith@email.com。

如果johnsmith@email.com在第2页没有搜索,则处理我的请求的removeForm是使用不包含johnsmith的拼接数组创建的,因此removeForm不被视为有效。

如何创建我的removeForm,考虑到提交removeForm之前完成的搜索?或者我可能做错了吗?

我不是母语为英语的人,所以如果有什么不清楚,请随时提问。

1 个答案:

答案 0 :(得分:1)

您可以使用包含当前页面索引的隐藏字段,这将有助于您再次进行搜索。

或者您可以使用事件侦听器在提交验证之前修改表单字段。