在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) }}
添加
$form->isValid()
如果没有提交答案,我会在枝条中得到这个。
答案 0 :(得分:1)
{{ 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()) {
此外,设置和显示表单错误可能会有很大帮助,检查错误,以及表单的哪一部分不正确。