Symfony2将表单提交给不同的控制器并检查isValid()

时间:2013-10-16 09:55:29

标签: validation symfony

我将表单提交给与输出表单的控制器不同的控制器。

我的问题是如何检查提交的数据是否有效?

我尝试过几件事。我要验证的主要内容是“_token”

我该怎么做?

这是我的代码示例。

/*
Out put the search form
*/
public function searchAction(Request $request)
{
$form = $this->createFormBuilder()
    ->setAction($this->generateUrl('email_search'))  # <- route to the search process controler
->setMethod('GET')
->add('userSearch', 'text',array(
        'required' => true,
        'label' => false,
        'attr' => array(
            'placeholder' => 'Search User Email',
                    )
                  )
        )
            ->add('Serch', 'submit')
            ->getForm();

    return $this->render(
                    'TwigBundle:Search:Search.html.twig', 
                    array(
                        'form' => $form->createView( )
                    )
                );

}

/*
Process the search
*/
public function emailResultsAction(Request $request){

    $form = $this->createFormBuilder()->getForm();
    $form->handleRequest($request);
    if ($form->isValid()) {
        $ret = $_POST;
    }else{
        $ret = 'failed';
    }
    /*
    ... Process the search
    */
    return new Response(print_r($ret));

}

这给出了错误:

"Call to undefined function Acmy\UserBundle\Controller\getForm() in xxxxxxx"

我可以自己验证搜索,但我不知道如何验证_token。

Symfony2文档似乎没有涵盖这一点。

提前致谢。

2 个答案:

答案 0 :(得分:5)

将表单创建分隔为自己的表单类http://symfony.com/doc/current/book/forms.html#creating-form-classes

通过执行此操作,您可以在第二个方法/控制器中创建表单,然后使用handleRequest将请求绑定到表单,然后通过执行检查表单是否有效

if ($form->isValid()){...

答案 1 :(得分:4)

您可以在控制器中创建一个创建表单的方法,然后使用它从两个操作中获取Form类。

伪:

private function buildSearchForm() {
    return $this->createFormBuilder()
        ->setAction(...)
        // ...
}

public function searchAction(Request $request) {
    $form = $this->buildSearchForm();
    // Do the necessary things
}

public function emailResultsAction(Request $request) {
    $form = $this->buildSearchForm();
    // Do your validation here
}