3

我正在使用一个 API,它作为响应的一部分返回一个名为“form”的数组。这是一个字段名称、数据类型和值的数组。

这些字段的数量和名称可能会有所不同,具体取决于当前使用的 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() 调用链,那很好。

我在这里做错了什么?

4

1 回答 1

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();

}
于 2012-11-12T03:22:36.933 回答