Symfony 2,如何将AJAX提交的数据保存到新实体中

时间:2016-03-22 11:37:47

标签: php jquery ajax symfony

好的,我已经使用JQuery将序列化数据提交到我的Symfony 2(2.7.10)应用程序中的函数中。

我现在遇到一些问题,试图将数据绑定到新实体并保存该实体。

以下是我迄今所做的事情:

public function AJAX_SaveTestAction(Request $request) {

    // $GetFormData = $request->get('Data'); <- This is a jquery serialized data

    $NewData = new TestInfo(); <- this is the entity I want to save

    $form = $this->createForm(new InfoType(), $NewData);
    $form->handleRequest($request);

    if ( $request->isMethod('POST') ) {

       $form->bind( $request->get('Data') );   

         $em = $this->getDoctrine()->getManager();
         $em->persist( $NewData ); <- not saving jquery returns 500 server error?
         $em->flush();
    }

    die(); <- this is just here for testing, I will want to return a json message or something else!
}

欢迎大家帮助。

感谢。

2 个答案:

答案 0 :(得分:0)

不要使用form-&gt; handleRequest和form-&gt; bind form-&gt; bind相当于在Symfony 2.6之前的form-&gt; handleRequest。

如果您使用的是Symfony 2.3,请使用form-&gt; bind 如果您使用的是Symfony 2.6+,请使用form-&gt; handleRequest

您的控制器应如下所示:

public function AJAX_SaveTestAction(Request $request) 
{
    $NewData = new TestInfo();

    $form = $this->createForm(new InfoType(), $NewData);
    $form->handleRequest($request);

    if($form->isSubmitted()){ // if you also want to check if your entity is valid, just replace it with "if($form->isValid()){"
         $em = $this->getDoctrine()->getManager();
         $em->persist( $NewData ); 
         $em->flush();

         return new Response('It works');
    }

    return new Response('error');
}

但是你的JS应该向这条路线发送一个POST请求(带有post参数)。

可能是这样的: http://api.jquery.com/jquery.post/

答案 1 :(得分:0)

要使用handleRequest将您的请求数据正确绑定到您的实体,Symfony需要一个数组,其中您的表单名称是POSTed数据中的关键字。

如果您没有覆盖表单的方法getName,则默认情况下会定义为&#34;强调&#34;您的Form类名称。所以它应该是info_type

TL; DR:您应该将您的数据提交为['info_type' => [ YOUR DATA... ]],而不仅仅是[ YOUR DATA... ]