私は、他のエンティティの既知の数のフォーム(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"を取得しています。
なぜブール値を受け取っているのかわかりません。
最終的に、私はResult1Type :: classを使用しませんでしたが、それは必要ではありませんでした。 私はコレクションの種類を使用して、あなたはこの方法でコントローラに新しい結果を直接作成できることです – Guy1871