Symfony提交的表单数据为NULL

时间:2016-06-27 21:33:37

标签: php forms symfony

在Symfony中我正在构建一个有四种可能选择的表单作为单选按钮。当用户提交表单时,我会选择提交的表单数据(用户选择)并将其显示在树枝中。问题是,即使用户选择了收音机,有时提交的表单数据也为空,有时候选择的选项会被传递并显示在树枝中。有时候,在twig中恢复null并刷新页面后,有时会显示数据,但这并不总是会发生。为什么这种不一致?我怎么解决这个问题?感谢

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

        dump($questionData);
        $answerData = $data[1];
        dump($answerData);

        $form = $this->createFormBuilder($answerData)
            ->add('answers', EntityType::class, array(
                'class' => 'QuizBundle:Answer',
                'query_builder' => function (EntityRepository $er) use ($questionID) {
                    return $er->createQueryBuilder('a')
                        ->where('a.question = :qID')
                        ->setParameter('qID', $questionID);
                },
                'multiple'=>false,
                'expanded'=>true,
                'error_bubbling' => true,
                'choice_label' => 'answer',
            ))
        ->add('Submit',SubmitType::class, array('label' => 'Send Answer'))
        ->getForm();

        $form->handleRequest($request);
        if($form->isSubmitted() && $form->isValid()) {
            $formData = $form->get('answers')->getData();
            $errors = $form->getErrors();
            return $this->render('QuizViews/correctAnswer.html.twig', array('ss' => $formData, 'errors' => $errors ));
        }

        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 Errors {{ dump(errors) }}

The form data

Null in twig

User answer in twig

  

添加$form->isValid()如果没有提交答案,我会在枝条中得到这个。

Adding validation to form, in twig I get this

2 个答案:

答案 0 :(得分:1)

很高兴你走得更远了。 我相信&#34; $ formData&#34;作为答案对象回归,你在 twig 所要做的只是调用:

{{ ss.getAnswer }}

其中getAnswer是实体答案的方法(我不记得您的代码)。您在上面显示的正确的表单数据看起来就像&#34;对象&#34;的转储。记住你需要从对象的角度思考。

如果这不起作用,请告诉我。

编辑#2。

尝试此更改:

->add('answers', EntityType::class, array(
        'class' => 'QuizBundle:Answer',
        'query_builder' => function (EntityRepository $er) use ($questionID) {
          return $er->createQueryBuilder('a')
                ->where('a.question = :qID')
                ->setParameter('qID', $questionID);
        },
        'multiple'=>false,
        'expanded'=>true,
        'choice_value' => 'answer',
        'choice_label' => 'answer',
))

我在这种情况下添加'choice_value' => 'answer',的地方&#39;回答&#39;应该是答案实体中存储的答案值。

编辑#3。 这很奇怪。我不确定为什么它不起作用。 您不应该将$ answerData传递给构建器。尝试将其留空,然后将其更改为下拉列表(默认):

$form = $this->createFormBuilder()
    ->add('answers', EntityType::class, array(
         'class' => 'QuizBundle:Answer',
         'label' => 'Select an Answer',
         'choice_value' => 'answer',
         'choice_label' => 'answer',
    ))

如果这不起作用,那么其他一些东西肯定是错的,可能是你的实体。这会为我返回db中的Entity值。

答案 1 :(得分:1)

您是否尝试检查表单是否有效?

if($form->isSubmitted() && $form->isValid()) {

此外,设置和显示表单错误可能会有很大帮助,检查错误,以及表单的哪一部分不正确。

相关问题