2015-03-08 64 views
1

我正在開發我的網站編輯頁面的界面。使用CKeditor。我想使用Ajax方法來保存修改。我的文字是DB中的股票。我使用教義來訪問他。Symfony2如何使教條更新的Ajax請求

腳本的jQuery

$(".loading").hide(); 

$('[name="contentsForm"]').submit(function() { 
    $('[name="contentsForm"]').hide(); 
    $("#contents .loading").show(); 
    $.ajax({ 
     type: "POST", 
     url: "{{ path('AdminAjaxEditText', {'page' : 'index', 'description' : 'contents'})}}", 
     data: "{'data': '" + $('#contentsForm_data').val() + "'}", 
     cache: false, 
     success: function(data){ 
      $('[name="contentsForm_data"]').html(data); 
      CKupdate(); 
      $('[name="contentsForm"]').show(); 
      $("#contents .loading").hide(); 
     } 
    }); 
    return false; 
}); 

控制器PHP

public function ajaxEditAction($page, $description, Request $request) { 

    $em = $this->getDoctrine()->getManager(); 

    $text = $em->getRepository("FDMWebsiteBundle:Text")->find(array("page" => $page, "description" => $description)); 
    $form = $this->get('form.factory')->createNamed($description."Form", new TextType(), $text); 

    if ($form->handleRequest($request)->isValid()) { 
     $em->flush(); 
    } 

    return $this->render("Bundle:Admin:textForm.html.twig", array(
     "form" => $form->createView() 
     )); 
} 

模板枝杈

{{ form_start(form, {'action': ''}, {'method': 'POST'}) }} 
{{ form_errors(form) }} 
{{ form_widget(form.data, { 'attr': {'class': 'ckeditor'} }) }} 
<input type="submit" class="saveTextBtn btn btn-primary pull-right" value="Enregistrer"/> 
<div class="clearfix"></div> 
{{ form_rest(form) }} 
{{ form_end(form) }} 

我的問題是當點擊保存阿賈克斯運行,但沒有被保存在我的數據庫?

我做了什麼錯?

我不明白爲什麼我的代碼不是刷新,而是在Ajax請求後顯示在textarea中。

對不起,我的英語,我學習它...

+1

嗨,你應該使用'findBy',而不只是'find'得到數據庫條目。 'find'方法將與條目的ID一起使用。對where語句的數組使用'findBy'或'findOneBy'。那麼你應該收到正確的條目並且可以更新它。 http://symfony.com/doc/current/book/doctrine.html#fetching-objects-from-the-database – adiebler 2015-03-08 18:39:24

+0

我使用查找,因爲我的實體有複合主鍵 – olive007 2015-03-08 18:57:03

+0

You $ form變量是在表單之前設置的輸入無效(並刷新)。因此,響應將包含仍然是舊的,只是從數據庫加載的值。沖洗後可能會重新加載數據。 – adiebler 2015-03-08 19:39:18

回答

0

我發現我的問題小號

首先我需要的字符集設置爲UTF-8和獲取數據格式的CKEditor不能形成textarea的

scriptCharset: "utf-8", 
data: "data=" + CKEDITOR.instances['contentsForm_data'].getData() 

http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.editor.html#getData

二:我的Ajax控制器需要使用getter請求。 form的handleRequest方法不起作用,我不知道爲什麼。如果有人能給我一個解釋,我正在尋找它。

if($request->isXmlHttpRequest()) { 
    $data = $request->request->get('data'); 
    $text->setData($data); 
    $em->flush(); 
} 

教程和一些後使用此解決方案,但我不明白爲什麼handlerResquest失敗?

第三:我需要配置CKEDITOR到不使用實體

CKEDITOR.config.entities = false; 

http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-entities