簡體   English   中英

Symfony2將Ajax請求數據傳遞到表單呈現控制器

[英]Symfony2 Passing ajax request data to a form rendering controller

我有一個Symfony表單有問題,我想根據事先查看的記錄來預填該表單。 目的是創建一種用於更改記錄數據的方法。 我通過javascript導航到表單頁面,並將ajax請求發送到呈現表單的同一控制器。

這是用於查看記錄的頁面的一部分:

    <input type="button" id="changeRecord" value="change"/>

    record id: <div id="recordID"> {{ record_id }} </div>

我像這樣通過javascript / jQuery訪問記錄ID:

    var CssSelectors = new Array(
        "recordID"
    );

    function getCurrentRecordID() {
        return parseInt($.trim($("#" + CssSelectors[0]).text()));
    };

javascript中的按鈕代碼如下:

    $('#changeRecord').click(function () {
        window.location.replace(Routing.generate(recordChangeRoute));

        $.ajax({
            url: Routing.generate(recordChangeAjaxRoute),
            type: "POST",
            data: {'recordID': getCurrentRecordID()}
    });
    // both Routes point to the same controller
    // problem located here ???

Symfony控制器操作如下:

public function changePlasmidRecordAction(Request $request) {
    $em = $this->getDoctrine()->getManager();
    $recordHandle = $em->getRepository('DataBundle:RecordClass');

    $AjaxRequest = Request::createFromGlobals();
    $RecordID = $AjaxRequest->request->get('recordID');

    $recordToUpdate = $recordHandle->findOneBy(array('id' => $RecordID));
    $updateForm = $this->createForm(new RecordClassType(), $recordToUpdate);
    $updateForm->handleRequest($request);

    if ($updateForm->isValid()) {
        $em->flush();
        return this->redirect($this->generateUrl('route_showRecord'));

    } else {
        return $this->render('DataBundle:RecordClass:updateRecord.html. twig',  
        array(
            'RecordID' => $RecordID,
            'form' => $updateForm->createView()
        ));
    }
}

我想要實現的是:

  • 查看記錄
  • 轉到預先填寫的表格
  • 進行更改並保存

查看記錄,創建表單,將更改持久保存到數據庫-所有工作。 不起作用的是訪問控制器內部所需的ID。 我可以按照在其他控制器操作中嘗試的方式訪問ajax請求數據,而不會出現問題。 “表單請求”如何干預? 還是? 我必須使用事件監聽器嗎?

非常感謝您的任何幫助,在此先感謝您!

我通過保留ajax內容並通過GET提交所需的數據來修復它。 像這樣:

    $('#changeRecord').click(function () {
    window.location.replace(Routing.generate(recordChangeRoute, {'recordID': getCurrentRecordID()}));
    });

謝謝您的寶貴意見。

暫無
暫無

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

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