Symfony2 ajax:参数+形式,绑定错误

时间:2014-09-03 13:03:19

标签: ajax forms symfony post

我将Symfony 2与ajax一起使用。我有一个表单,当我点击我可以发送一个表格由ajax。我想发送2变量:

例子: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()));
}

我有绑定问题!! 我的实体是空的...... 当我改变我的"数据"在ajax只有$('form#recherche').serialize()(只有一个变量)它的工作。

我的错误在哪里?

2 个答案:

答案 0 :(得分:0)

我认为你正在错误地打包数据。

首先,收集表单数据,然后添加msg项目:

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

然后:

....
data: data
....

答案 1 :(得分:0)

您只需在Controller中正确读取表单数据即可。例如,如果您的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在twig中,则必须使用正确的表单名称和字段名称显示输入。这应该是这样的:

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

当然,您的FormAType应该包含上述字段。