【问题标题】:Symfony2 createFormBuilder - Dynamic Advanced Search FormSymfony2 createFormBuilder - 动态高级搜索表单
【发布时间】:2012-11-12 03:06:36
【问题描述】:

我正在使用一个 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() 调用链,那很好。

我在这里做错了什么?

【问题讨论】:

    标签: symfony


    【解决方案1】:

    啊,想通了。这一行

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-10
      • 2015-01-14
      • 1970-01-01
      • 2014-09-02
      • 2018-11-13
      • 1970-01-01
      相关资源
      最近更新 更多