Php Symfony2:创建两个控制器,一个用于显示表单,另一个用于处理提交

Php Symfony2:创建两个控制器,一个用于显示表单,另一个用于处理提交,php,forms,symfony,Php,Forms,Symfony,您好,我是Symfony2 MVC框架的新成员。到目前为止,我所取得的成就是使用细枝模板在细枝模板中呈现表单。接下来我要做的是创建第二个(单独的)控制器来处理表单提交。你能和我分享一下如何做到这一点吗 我已经阅读了symfony2文档,但是它不起作用 非常感谢:)您需要对正在生成的表单设置操作,如下所示: public function generateSearchBarAction() { $form = $this->createFormBuilder() //

您好,我是Symfony2 MVC框架的新成员。到目前为止,我所取得的成就是使用细枝模板在细枝模板中呈现表单。接下来我要做的是创建第二个(单独的)控制器来处理表单提交。你能和我分享一下如何做到这一点吗

我已经阅读了symfony2文档,但是它不起作用


非常感谢:)

您需要对正在生成的表单设置操作,如下所示:

public function generateSearchBarAction()
{
    $form = $this->createFormBuilder()
        //This is where we are defining the target route
        ->setAction($this->generateUrl('route_to_catch_the_request'))
        ->setMethod('POST')
        ->add('keyword')
        ->getForm()
    ;

    return $this->render('search_bar.html.twig', array(
        'form' => $form->createView()
    ));
}
然后,在
路由到捕获请求时提供的控制器可以捕获请求

public function showSearchKeywordsAction(Request $request)
{
    $form->handleRequest($request);
    if ($form->isValid()) {
         //do whatever...
    }
}

为什么不在同一控制器和同一操作中处理提交?看一看我同意@MKhalidJunaid。GET和POST-action流通常有50%以上相同。为什么不利用这个优势呢?我怎么能这样做呢。你能给我举个简单的例子吗。我想让我的用户做一个简单的查询:字段可以是firstname、email和enquiry,例如这是一个非常典型的用例,可以像其他人所说的那样只使用一个控制器来完成。提供一个完整的演练。我使用的是CreateForm而不是createFormBuilder,因此我可以使用formAbstract类中的操作吗?
CreateForm()
需要一个formtype作为参数。您可以将
setAction()
添加到您引用的formtype。这是正确的答案,您还可以直接将路由添加到细枝模板中,即表单标记中作为post url参数