我在控制器操作中直接生成了一个表单:
$repoQuestions = $this->getDoctrine()->getRepository('QuizzBundle:Questions');
$questions = $repoQuestions->findBy(array('quizz'=>$quizz));
$formBuilder = $this->createFormBuilder();
foreach($questions as $q){
$formBuilder
->add('rep'.$q->getId(), 'entity', array(
'label'=>$q->getTitre(),
'property' => 'titre',
'query_builder' => function(\MyApp\QuizzBundle\Entity\ReponsesRepository $r) use($q){
return $r->getReponsesByQuestion($q);
},
'multiple'=>false,
'expanded'=>true,
'required'=>true
));
}
$formQuizz = $formBuilder->getForm();
if ($request->getMethod() == 'POST') {
$formQuizz->bind($request);
$data = $formQuizz->getData();
if ($formQuizz->isValid()) {
$em = $this->getDoctrine()->getManager();
$repoRep = $this->getDoctrine()->getRepository('QuizzBundle:Reponses');
return $this->render('QuizzBundle:Quizz:resultat-quizz.html.twig', array(
'data'=>$data
));
}
}
在我看来,我有:
<form method="POST" action="{{path('quizz_quizz', {'cat':quizz.categorie.nom, 'id':quizz.id})}}" {{form_enctype(formQuizz)}} id='formQuizz' novalidate>
{% for q in questions %}
<div id="question">
<img src="{{asset('bundles/site/images/quizz-' ~quizz.id~ '/'~q.slug~'.png')}}"><br>
{{form_label(attribute(formQuizz, 'rep' ~ q.id)) }}<br>
{{form_widget(attribute(formQuizz, 'rep' ~ q.id))}}
</div>
{% endfor %}
{{ form_rest(formQuizz) }}
</form>
但是当我提交我的表单函数时,isValid()是真的但是我无法获取表单数据...
当我尝试:
$data = $formQuizz->getData();
print_r($data);
我得到了:
数组([rep11] =&gt; [rep12] =&gt; [rep13] =&gt; [rep14] =&gt; [rep15] =&gt; [rep16] =&gt; [rep17] =&gt; [rep18] =&gt; [rep19] =&gt; [rep20] =&gt;)
答案 0 :(得分:0)
您似乎没有正确使用实体类型。你需要指定一个实体类。该类是您正在显示的实体,因此您可能需要Responses类。 您可能还想考虑将响应作为每个问题的集合,这样您就可以获得$ q-&gt; getResponses(),而不必对每个字段进行查询。
$formBuilder->add('rep'.$q->getId(), 'entity', array(
'class' => 'QuizzBundle:Responses',
'label'=>$q->getTitre(),
'property' => 'response_field_you_want_displayed',
'choices' => $q->getResponses(),
'multiple'=>false,
'expanded'=>true,
'required'=>true
));