2012-11-12 87 views
3

我正在使用一個API,作爲響應的一部分,它返回一個名爲「form」的數組。這是一個字段名稱,數據類型和值的數組。Symfony2 createFormBuilder - 動態高級搜索表單

根據當前正在使用的API端點,這些字段的數量和名稱可能會有所不同。但是表單數組的結構總是相同的。這樣就symfony作爲其工作過程如下:

  1. 通過表單陣列創建表單對象
  2. 環路和添加的數組元素作爲字段
  3. 陣列發送到視圖

基本上,這種形式不過是一種高級搜索形式。系統中絕對沒有與實體的鏈接。

因此,作爲Symfony2的新手,在閱讀本文檔(http://symfony.com/doc/2.0/book/forms.html#building-the-form)之後,我試圖在控制器中執行此操作創建以下功能:

/** 
* Generate a form for each field passed in an array. 
* 
* @param array $formArray A custom array of fields do be shown in the form 
* @return formView 
*/ 
private function generateForm($formArray) 
{ 

    // Simple demo for testing 
    $formArray = array(
     0 => array(
      'name' => 'FirstName', 'type' =>'text' 
      ), 
     1 => array(
      'name' => 'LastName', 'type' =>'text' 
      ) 
     ); 

    $form = $this->createFormBuilder($formArray); 

    foreach($formArray as $field) { 
     $form->add($field['name'], $field['type']); 
    }   

    $form->getForm(); 


    return $form->createView(); 

} 

我從得到的是

Fatal error: Call to undefined method Symfony\Component\Form\FormBuilder::createView() in .... (my controller file) 

奇怪的是,如果我讓添加字段和getForm()調用鏈按照該文件的例子,它的罰款。

我在這裏做錯了什麼?

回答

6

啊計算它。此行

$form->getForm(); 

該方法返回一個Form對象,而我將它視爲一個setter。

所以工作控制器的功能如下:

/** 
* Generate a form for each field passed in an array. 
* 
* @param array $formArray A custom array of fields do be shown in the form 
* @return formView 
*/ 
private function generateForm($formArray) 
{ 

    $formBuilder = $this->createFormBuilder($formArray); 

    foreach($formArray as $field) { 
     $formBuilder->add($field['name'], $field['type']); 
    }   

    $form = $formBuilder->getForm(); 

    return $form->createView(); 

}