使用ajax

时间:2015-05-23 17:15:31

标签: php jquery ajax symfony entity

这是我与Symfony2的第一个项目,我试图用ajax持久化实体。以下是一些示例代码:

路由

...
version_ajax_create:
path:     /ajax-create
defaults: { _controller: "CustomNameBundle:Version:ajax" }
methods:  POST
...

控制器

public function ajaxAction()
    {
        $request = $this->get('request');
        $em      = $this->getDoctrine()->getManager();
        $entity  = new Version();

        // Get data from ajax
        $project_id = $request->request->get('project_id', 'null');
        // Get project and pass it to the entity
        $project = $em->getRepository('CustomNameBundle:Project')->find(array(
            'id' => $project_id
        ));

        $entity->setProject($project);

        $form = $this->createCreateForm($entity);
        $form->handleRequest($request);

        if ($form->isValid()) {
            $em = $this->getDoctrine()->getManager();
            $em->persist($entity);
            $em->flush();

            $response = array('success' => true);
        } else {
            $response = array('success' => false);
        }

        return new JsonResponse($response);
    }

查看

  $('#add_new_version').on('click', function(e) {
        e.preventDefault();
        $.ajax({
            type: 'POST',
            url: '{{ path('version_ajax_create') }}',
            dataType: 'json',
            data: { 'project_id': '{{ entity.id }}' }
        })
        .done(function(data) {
            alert('success!')
            console.log(data);
        })
        .fail(function(data) {
            alert('fail!')
            console.log(data);
        });
    });

版本实体本身具有id(自动生成),创建和修改日期(带有生命周期回调)和关联项目ID(多对1关系)。

我试图创建一个刚刚传递项目ID的新版本。

我认为问题来自这一行

$form->handleRequest($request);

它希望序列化的$ request不仅仅是一个JSON obj。

如果我禁用表单验证并持续指示实体,它将成功保存,但我不确定这是否是一个好的做法。

在这种情况下如何处理任何帮助或建议?

1 个答案:

答案 0 :(得分:0)

嗯,如果我理解你的话,你应该可以使用:

$project_id = $request->request->get('project_id', 'null');
$form->submit(['form_name' => ['project_id' => $project_id ]]);

if ( $form->isValid() ){

}

我不确定你说了什么:

  

它希望序列化的$ request不仅仅是一个JSON obj。

我知道AngularJS使用JSON将数据传输到服务器,但是,我不知道jQuery也会这样做。是吗?