handleRequest($ request)对Symfony 2中的“GET”方法不起作用

时间:2013-11-23 07:41:02

标签: symfony get

我是Symfony2的noobie。 handleRequest()函数不适用于"GET"方法,而相同的代码适用于"POST"

public function addAction(Request $request){
    $std = new Student();

    $form = $this->createForm(new StudentForm, $std, 
        array( 'method'=>'GET'));

    $form->handleRequest($request);

    if($form->isSubmitted()){
        $std= $form->getData();
        $em= $this->getDoctrine()->getManager();
        $em->persist($std);
        $em->flush();
        return $this->render('target.twig');
    }

    return $this->render('target twig', 
        array('newStdForm'=> $form->createView(),));
}

上述代码无效,但如果我将'method':'GET'更改为'method':'POST',则可以正常使用。

4 个答案:

答案 0 :(得分:18)

在StudentForm类的buildForm方法中指定表单的方法。因此,handleRequest将能够获取GET参数。

class StudentForm
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
         // ...
        $builder->setMethod('GET');
    }
}

答案 1 :(得分:1)

我认为这是因为在POST请求中,参数在HTTP请求的主体中传递。而handleRequest在请求正文中查找这些值。但是在GET请求中,参数直接在url中传递。所以我认为这就是处理不起作用的原因。

通常我们使用GET来获取页面或网址以及POST以将信息发送到服务器。

答案 2 :(得分:0)

你确定你的树枝模板是正确的吗?

答案 3 :(得分:0)

我今天遇到了这个问题。 Pierre Roland的回答对于当前版本来说是部分正确的。 我检查了默认" HttpFoundationRequestHandler"在" handleRequest"。

中调用

将考虑明确的GET表单"提交"如果:

  • 表单没有名称(例如,如果您使用表单类)。
  • 请求查询包含一个带有表单名称的参数。