2014-09-03 61 views
0

我使用symfony 2和ajax。我有1個表單,當我點擊時,我可以通過ajax發送一個表單。我想送2variables:Symfony2 ajax:參數+形式,綁定錯誤

爲例:AJAX:

$.ajax({ 
url : "{{path('lcv_acceuil_form')}}", 
type : "POST", 
dataType : 'html', 
data: 
{ 
msg: 'form', 
datas: $('form#recherche').serialize() 
}, 
cache:false, 
success : function() ... 

控制器:

public function formAddAction() 
{ 
     $entity = new FormA(); 
     $form = $this->createForm(new FormAType(),$entity); 

     $request = $this->get('request'); 
     $em = $this->getDoctrine()->getManager(); 
     if($request->getMethod()=='POST') 
     { 
      if($request->isXmlHttpRequest()) 
       { 
        if ($request->request->get('msg') == "msg") 
        { 
         return (new Response('Msg')); 
        } 
        else if ($request->request->get('msg') == "form") 
        { 
        $form->bind($request); 
        $em->persist($entity); 
        $em->flush(); 

        return (new Response('Form added')); 
        } 
       else 
       { 
        return (new Response('Its not Good!!')); 
       } 
      } 
    return (new Response('End')); 

    } 
     return $this->render('LCVAcceuilForm:Pages:formmanagement.html.twig', 
     array('entity'=>$entity,'form'=>$form->createView())); 
} 

我有約束力的問題! 我的實體是空的... 當我改變我的「數據」在阿賈克斯只是$('form#recherche').serialize()(只有一個變量)其工作。

我的錯誤在哪裏?

+0

我解決的問題BU改變 數據: { 消息: '形式', DATAS:$( '形式#RECHERCHE')序列化() }, 通過 數據:$('形式# ('msg'),它不存在!('msg')。serialize()+'&msg = form', – 2014-09-03 14:25:03

回答

0

我認爲您包裝數據不正確。

首先,收集表單數據,然後添加msg項目:

var data = $('form#recherche').serializeArray(); 
data['msg'] = 'form'; 

然後:

.... 
data: data 
.... 
+0

in controller,when I do ... get – 2014-09-05 13:45:59

0

所有你需要做的是,在正確的控制器讀取您的表單數據。例如,如果您FormA實體具有屬性(也getter和setter):

你必須做這樣的事情:

public function formAddAction() 
{ 
$entity = new FormA(); 
$form = $this->createForm(new FormAType(),$entity); 

$request = $this->get('request'); 
$em = $this->getDoctrine()->getManager(); 
$form->handleRequest($request); 
if($request->getMethod()=='POST') 
{ 
    if($request->isXmlHttpRequest()) { 
     $data = $form->getData(); 
     if ($request->request->get('msg') == "msg") { 
      return (new Response('Msg')); 
     } elseif ($request->request->get('msg') == "form") { 
      $entity->setName($form['name']); 
      $entity->setSurname($form['surname']) 
      $em->persist($entity); 
      $em->flush(); 
     } 
    } 

    return new Response('Success'); 
} 

return $this->render('LCVAcceuilForm:Pages:formmanagement.html.twig', 
    array('entity'=>$entity,'form'=>$form->createView()) 
); 

}

你ajax應該看起來像這樣:

$.ajax({ 
    url : "{{path('lcv_acceuil_form')}}", 
    type : "POST", 
    dataType : 'html', 
    data: $('form#recherche').serialize(), 
    cache:false, 
    success : function() ... 

如果您FormAType表單名稱是例如:formA在樹枝,你必須顯示適當的表單名稱輸入字段名稱。這應該是這樣的:

<input type="text" name="formA[name]"/> 
<input type="text" name="formA[surname]"/> 
<input type="hidden" name="msg" value="test"/> 

當然你FormAType應有領域,如上述。

+0

它不工作!我不想創建一個隱藏的輸入。我想改變「味精」。例如:如果msg =「form」,控制器知道它的形式,並且如果msg「完成」,控制器將通過提供更多信息來回復。 – 2014-09-05 13:45:01