2016-06-27 7 views
0

В Symfony я создаю форму с четырьмя возможными вариантами в качестве переключателей. Когда пользователь отправляет форму с выбором, я беру предоставленные данные формы (выбор пользователя) и показываю ее на веточке. Проблема в том, что иногда представленные данные формы являются нулевыми, даже если пользователь выбрал радио, а иногда выбранный выбор передан и отображен на ветке. Также иногда, когда вы возвращаете нуль в ветке и обновляете страницу, данные отображаются, но это не всегда происходит. Почему эта несогласованность? Как я могу это решить? БлагодаряДанные формы формы Symfony 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)); 
    } 

Dumping the submitted form data in twig

<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

Adding $form->isValid() I get this in twig when the answer is not submitted.

Adding validation to form, in twig I get this

+0

Hi there Otonel. Вы очень близки. Не расстраивайтесь. Попробуйте добавить дополнительные отладочные или дамп-операторы, чтобы выяснить, что может быть неправильным. –

ответ

1

Рад, что вы добрались дальше. Я считаю, что «$ FormData» возвращается как объект ответа, и все, что вам нужно сделать в прут это вызов что-то вроде:

{{ ss.getAnswer }} 

Где getAnswer является метод Entity Ответ (I не помните свой код). Правильные данные формы, которые вы показываете выше, выглядят точно как свалка «объекта». Помните, что вам нужно думать об объектах.

Дайте мне знать, если это не поможет.

Редактировать # 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', в этом случае «ответ» должно быть значение ответа сохраняется в ответ Entity.

Редактировать # 3. Это странно. Я не уверен, почему он не работает. Вам не нужно будет передавать $ answerData в конструктор. Попробуйте оставить это поле пустым, и давайте изменим его в раскрывающемся списке (по умолчанию):

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

Если это не работает, что-то еще, безусловно, не так, возможно, ваши объекты. Это возвращает значение Entity в db для меня.

+0

Привет. Я попытался вызвать мой getAnswer() из моей сущности без успеха. После точки не получаю никаких предложенных методов. (Сс.) Также я пробовал $ formData = $ form-> get ('ответы') -> getData(); $ f = $ formData-> getAnswer(); но я получаю эту ошибку: Ошибка: вызов функции-члена getAnswer() на не-объекте – Otonel

+0

Вы создали геттеры и сеттеры в Symfony for Answer: 'php bin/console doctrine: generate: entity AppBundle/Entity/Answer'? ?? Это автоматически создает их, тогда вы можете открыть Answers.php, чтобы узнать, какие изменения внесены. Он сохраняет резервную копию файла «Answers.php ~». –

+0

У меня уже были геттеры и сеттеры в объекте «Ответ». В любом случае, я сделал эту команду на консоли. – Otonel

0

Вы пытались проверить, имеет ли ваша форма?

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

Кроме того, установлены и ошибки формы отображения может помочь много, чтобы проверить, что это неправильно, и какая часть вашей формы не является правильным.

+0

Я добавил '$ form-> isValid()' и теперь, отправляя ответ, контроллер пытается снова создать вопрос. Так что моя форма недействительна. – Otonel

+0

Я добавил в свой код, чтобы получить ошибки в форме и отобразить их в ветке. Когда вы отправляете ответ, и вопрос строится снова на ветке, ошибок нет. Только после того, как выбор будет представлен, и выбор будет отображаться корректно в твинге, форма не будет содержать никаких ошибок. – Otonel

+0

@ Alvin Bunk. Я редактировал код, и теперь у меня есть раскрывающийся список. Хорошим является то, что выбранный ответ отображается в ветке правильно каждый раз. Единственная проблема заключается в том, что список содержит все ответы из моей базы данных по всем вопросам. – Otonel

Смежные вопросы