2013-12-10 58 views
2

我試圖將其他數據與提交的表單一起發送到Symfony2中的控制器。Symfony2 - 通過Ajax發送其他數據以及表單數據導致IsValid()返回false

當我嘗試此類似:

$("#submit_btn").on("click", function(e){ 
     e.preventDefault(); 
     $.ajax({ 
      type: "POST", 
      url: post_url, 
      data: form.serialize() 
     }); 
    }); 

我看到我有一個成功的POST請求,然後重定向的預期控制器動作裏面,如果IsValid()返回真。

但是,當我嘗試與形式發送其他數據,如:

$("#submit_btn").on("click", function(e){ 
     e.preventDefault(); 
     $.ajax({ 
      type: "POST", 
      url: post_url, 
      data: { form: form.serialize(), otherdata: "test" } 
     }); 
    }); 

我沒有得到重定向302響應。相反,我只收到一個200響應,意味着IsValid()方法返回false。我的問題在這裏如何不僅發送表單,還有其他數據呢?

這裏是我的控制器操作:

public function postOverviewAction(Request $request, $id) 
    { 
     $overview = $this->get("doctrine_mongodb")->getRepository("GbrBEBundle:Overview")->findOneById($id); 
     $overview_photos = $this->get("doctrine_mongodb")->getRepository("GbrBEBundle:OverviewPhoto")->findAll(); 
     $form = $this->createForm(new OverviewType(), $overview); 
     $form->handleRequest($request); 

     $height = $form->get("coordinate_height")->getData(); 
     $width = $form->get("coordinate_width")->getData(); 
     $x = $form->get("coordinate_x")->getData(); 
     $y = $form->get("coordinate_y")->getData(); 

     if($form->isValid()) 
     { 
      $overview->setCropCoordinates(array('height' => $height, 'width' => $width, 'x' => $x, 'y' => $y)); 
      $dm = $this->get("doctrine_mongodb")->getManager(); 
      $dm->persist($overview); 
      $dm->flush(); 
      return $this->redirect($this->generateUrl("gbr_be_get_overview")); 
     } 
     return $this->render("GbrBEBundle:Default:overview.html.twig", array(
      "form" => $form->createView(), 
      "overview" => $overview, 
      "overview_photos" => $overview_photos, 
     )); 
    } 

回答

1

您可以將映射的字段添加到窗體:

How do I add an unbound field to a form in Symfony which is otherwise bound to an entity?

設置輸入text應該證明是最通用的。

您也可以創建一個collection字段作爲未映射的字段,併爲其分配text類型。這將允許您在接收端擁有多個附加文本數據。

http://symfony.com/doc/current/reference/forms/types/collection.html

+0

首先,感謝您的回答。我的問題不在於未映射的字段。它發送的請求不僅包括表單數據,還包括jQuery中設置的其他變量。 Symfony在調用'IsValid()'方法時有一些機制。所以顯然它認爲表單根本沒有發佈,實際上它是在jQuery中創建的集合內部發布的其他變量。 –

+0

你也在發送令牌嗎? – Flosculus

0

可以嘗試改變:

data: { form: form.serialize(), otherdata: "test" } 

通過 數據:form.serialize()+ '& otherdata =測試',

我認爲它因爲.serialize( )返回一個字符串。