我試圖將其他數據與提交的表單一起發送到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,
));
}
首先,感謝您的回答。我的問題不在於未映射的字段。它發送的請求不僅包括表單數據,還包括jQuery中設置的其他變量。 Symfony在調用'IsValid()'方法時有一些機制。所以顯然它認爲表單根本沒有發佈,實際上它是在jQuery中創建的集合內部發布的其他變量。 –
你也在發送令牌嗎? – Flosculus