2017-06-08 6 views
1

私は、他のエンティティの既知の数のフォーム(Result)を含むエンティティ(サンプル)のフォームを作成しています。PHP-SYMFONY3フォームビルダにフォームビルダを追加する

サンプルはResultのコレクションを持っています。 (ともParameterのコレクションを)

私のコントローラでこの

$em = $this->getDoctrine()->getManager(); 
$sample = $em->getRepository('ReceptionBundle:Sample')->find($id); 
$formBuilder = $this->createFormBuilder(); 

$i = 0; 
foreach ($sample->getParameter() as $param){ 

    $fb = $this->get('form.factory')->createNamedBuilder($i, FormType::Class, $sample); 
    if ($param->getCriteria()===false){ 
     $fb->add('result', Result1Type::class, array('data_class'=>null)); 
    } 
    else { 
     $fb->add('result', Result2Type::class, array('data_class'=>null)); 
    } 
    $formBuilder->add($fb); 
    $i++; 

} 
$formBuilder->add('save',  SubmitType::class); 
$form = $formBuilder->getForm(); 

のようなコードを見て、私はこれをしようとすると、フォームを確認する前に、私はエラーを持っている:

フォームのビューデータはクラスReceptionBundle \ Entity \ Resultのインスタンスであると予想されますが、クラスDoctrine \ ORM \ PersistentCollectionのインスタンスです。このエラーは、 "data_class"オプションをnullに設定するか、Doctrine \ ORM \ PersistentCollectionクラスのインスタンスをReceptionBundle \ Entity \ Resultのインスタンスに変換するビュートランスフォーマーを追加することで回避できます。

だから私はnullに「data_class」オプションを設定しようとすると、私は、フォームを表示することができますが、私はそれを提出することはできません。

タイプの

期待値「教義\共通\コレクションフィールド "ReceptionBundle \ Entity \ Sample#$ result"の代わりに "boolean"を取得しています。

なぜブール値を受け取っているのかわかりません。

+0

最終的に、私はResult1Type :: classを使用しませんでしたが、それは必要ではありませんでした。 私はコレクションの種類を使用して、あなたはこの方法でコントローラに新しい結果を直接作成できることです – Guy1871

答えて

0

最終的に、私はResult1Type :: classを使用しませんでしたが、それは必要ではありませんでした。 私はコレクション型を使用して、事はあなたが結果を直接フォームにsyncronisedされ、コントローラに直接このよう

foreach ($sample->getParameter() as $param){ 

$result = new Result(); 
$sample->addResult($result); 
} 
$form = $this->createForm(AnalyseType::class, $sample); 

を新しい結果を作成できることです。

関連する問題