Symfony2:使用单选按钮获取发布数据

时间:2014-01-22 20:26:41

标签: php symfony formbuilder

我在控制器操作中直接生成了一个表单:

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

1 个答案:

答案 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
));