Symfony表单提交错误数据

时间:2016-06-26 20:21:48

标签: php forms symfony

在Symfony中我有我的代码的这一部分,我正在构建一个带有一些数据的视图和带有一些单选按钮的表单。提交表单时,我在视图中执行转储以检查已提交的数据,但数据与表单构建的数据不匹配。有人可以帮忙吗?感谢。

public function playAction(Request $request){
    $data = $this->getDbQuestion();
    $questionData = $data[0];
    dump($questionData);
    $answerData = $data[1];
    dump($answerData);

    $form = $this->createFormBuilder($answerData)
    ->add('answers', ChoiceType::class,
         array(
             'choices'=>  $answerData,
             'multiple'=>false,'expanded'=>true,
             'choice_label' => 'answer',
    ))
    ->add('Submit',SubmitType::class, array('label' => 'Send Answer'))
    ->getForm();

    $form->handleRequest($request);
    if($form->isSubmitted()) {
         $formData = $form->getData();
         return $this->render('QuizViews/correctAnswer.html.twig', array(
                'ss' => $formData
        ));
    }
    return $this->render('QuizViews/playQuiz.html.twig', array(
        'form' => $form->createView(),
        'question' => $questionData
    ));
}
  

枝条

<a href="/quiz/question">
    <input type="button" value="Start Quiz" />
</a>
<br>
FormData Correct {{ dump(ss) }}

Form data

Submitted form Data

2 个答案:

答案 0 :(得分:0)

验证表单isSubmitted之后获取数据的调用不正确。你需要像这样打电话:

$formData = $form->get('answers')->getData();

只是得到了答案&#39;仅

编辑#2 您可能还想更改此信息:

->add('answers', ChoiceType::class,
    array(
        'choices'=>  $answerData,
        'multiple'=>false,
        'expanded'=>true,
        'choice_label' => 'answer',
        'choice_value' => $answerData,
))

设置&#39; choice_value&#39;,实际从getData()中选择并返回的内容。

你能发贴你的枝条答案文件吗?编辑你的帖子,所以我可以看到。

答案 1 :(得分:0)

聊天后,这可能是答案部分的更好解决方案:

->add('answers', EntityType::class, array(
    'class' => 'AppBundle:Answer',
    'query_builder' => function (EntityRepository $er) {
        return $er->createQueryBuilder('a')
                ->where('a.question_id->getId() = :qID')
                ->setParameter('qID', 1);
    },
     'multiple'=>false,
     'expanded'=>true,
    'choice_label' => 'answer',
))

试试吧!