簡體   English   中英

用ajax驗證symfony2形式

[英]Validating symfony2 form with ajax

這是我與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);
        });
    });

Version實體本身具有ID(自動生成),創建和修改日期(帶有生命周期回調)和關聯的項目ID(多對1關系)。

我正在嘗試創建一個僅通過項目ID的新版本。

我認為問題出在這條線

$form->handleRequest($request);

它期望一個序列化的$ request不僅僅是一個JSON obj。

如果我禁用了表單驗證並直接控制實體,那么它將成功保存,但是我不確定這是否是一個好習慣。

任何幫助或建議在這種情況下如何進行?

嗯,如果我沒聽錯,您應該可以使用:

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

if ( $form->isValid() ){

}

我不確定你說什么:

它期望一個序列化的$ request不僅僅是一個JSON obj。

我知道AngularJS使用JSON將數據傳輸到服務器,但是,我不知道jQueryjQuery 可以?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM