2013-07-02 55 views
1

我試圖設置一個內嵌可編輯窗體來編輯一個TaskType窗體。我通過ajax發送一個請求,該請求需要返回字段名稱的json對象和呈現的html input/select/textarea。Symfony2窗體 - 獲取控制器中的可編輯元素

但是,我看不到一種提取呈現的html的方式。或者,有沒有辦法將一個表單呈現給樹枝中的json(儘管這看起來不正確)?

我只能傳回JsonResponse中的值和輸入類型,並在JavaScript中呈現元素,但使用Symfony2 Form呈現器會很有意義。

進出口尋找返回的東西是這樣的:

{ 
    title: "<input ... />", 
    author: "<select ... ><option>...</option></select>" 
    ... 
} 

任何幫助,將不勝感激! :)

回答

0

小枝擁有每種類型的字段的定義,因此我強烈建議使用Twig的渲染功能。

你可以做這樣的事情:

$formView = $this->createForm(new FormClass(), $entity)->createView(); // your form view 

$json = array(); // initialize json array 

foreach ($formView as $fieldKey => $field) { 
    $json['html'][$key] = $this->container 
         ->get('templating') 
         ->render('formField.html.twig', array('field' => $field)); 
} 

$json['message'] = 'Success!'; // send a success or failure message 

// encode the array above into json and return it 

而且模板對通話{{form_widget(場)}}{{form_row(場)}}(包括標籤和錯誤消息)。

不確定這是否會表現良好,所以最好多次調用渲染函數。下面

備選:

$formView = $this->createForm(new FormClass(), $entity)->createView(); // your form view 

// parameters for the template 
$params = array(
    'form' => $formView 
); 

// render the form once 
$renderedForm = $this->container 
        ->get('templating') 
        ->render('form.html.twig', $params); 

$json = array(
    'message' => 'Success!' // send a success or failure message, 
    'html' => $renderedForm, 
); 

// encode the array above into json and return it 

Symfony的有大約how to customize form rendering文檔。有了這個文檔,你會明白你爲什麼需要通過Twig。

相關問題