3

応答の一部として「フォーム」という配列を返す API を使用しています。これは、フィールド名、データ型、および値の配列です。

これらのフィールドの数と名前は、現在使用されている 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オブジェクトを返しますが、私はそれをセッターとして扱っていました。

したがって、動作するコントローラー機能は次のとおりです。

 /**
 * 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 に答える