2013-11-23 16 views
8

我是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',然後正常工作。

+0

嗨,請嘗試更具體。 – gilden

+0

你爲什麼要強制執行GET?是否有特定的理由使用GET請求而不使用POST? – ghostika

回答

1

我認爲這是因爲在POST請求中,參數在HTTP請求的主體中傳遞。那個handleRequest在請求的主體內查找這些值。但是在GET請求中,參數直接在url中傳遞。所以我認爲這就是爲什麼處理不起作用。

通常我們使用GET來獲取頁面或url和POST來發送信息到服務器。

0

你確定你的樹枝模板是正確的嗎?

17

在StudentForm類的buildForm方法中指定表單的方法。因此,handleRequest將能夠獲取GET參數。

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

我今天遇到了這個問題。 Pierre Roland的答案對於當前版本是部分正確的。 我檢查了在「handleRequest」中調用的默認「HttpFoundationRequestHandler」。

一個明確的GET形式將被視爲「提交」,如果:

  • 形式沒有名字(如果你使用一個窗體類爲例)。
  • 請求查詢包含一個帶有表單名稱的參數。
相關問題