2012-11-12 54 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(); 

}