2016-06-27 2 views
0

Symfony에서 라디오 버튼으로 4 가지 가능한 선택이 가능한 양식을 작성 중입니다. 사용자가 선택하여 양식을 제출하면 제출 된 양식 데이터 (사용자 선택)를 가져 와서 나뭇 가지에 표시합니다. 문제는 사용자가 라디오를 선택한 경우에도 제출 된 양식 데이터가 null 인 경우가 있으며 선택한 선택 사항이 전달되어 나뭇 가지에 표시되는 경우가 종종 있습니다. 또한 나뭇 가지에서 null을 수신하고 페이지를 새로 고친 후에도 데이터가 표시되기도하지만 항상 그런 것은 아닙니다. 왜이 불일치? 이 문제를 어떻게 해결할 수 있습니까? 감사합니다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

안녕하세요. Otonel. 너는 아주 가깝다. 좌절하지 마십시오. 디버그 또는 덤프 문을 추가하여 잘못된 것이 무엇인지 파악하십시오. –

답변

1

당신이 더있어 기쁘다. 는 나는 "$ formData"는 응답 객체로 돌아오고 있다고 생각하고 에서 할 일은 같은 호출 뭔가 나뭇 가지 : getAnswer는 엔티티 응답하는 방법 (I입니다

{{ ss.getAnswer }} 

을 귀하의 코드를 기억하지 마십시오). 위의 올바른 양식 데이터는 "개체"의 덤프와 똑같습니다. 당신은 사물의 관점에서 생각할 필요가 있다는 것을 기억하십시오.

작동하지 않는지 알려주세요.

편집 # 2. 나는이 경우 '대답'에서 'choice_value' => 'answer', 추가 한

->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', 
)) 

는 응답 엔터티에 저장된 응답 값이어야합니다 :

이 변화를 시도하십시오.

편집 # 3. 이상합니다. 왜 작동하지 않는 지 모르겠습니다. $ answerData를 빌더로 전달할 필요는 없습니다. 이 빈 떠나 시도하고의이 드롭 다운 목록 (기본값)로 변경하자

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

를 문제가 해결되지 않으면, 뭔가 확실히 잘못이다, 아마도 당신의 엔티티. 이것은 나를위한 데이터베이스에서 Entity 값을 반환합니다.

+0

안녕하세요. 내 엔티티에서 getAnswer()를 성공하지 않고 호출하려고했습니다. 나는 점 뒤에 어떤 제안 된 방법도 얻지 못한다. (ss.) 또한 나는 $ formData = $ form-> get ('answers') -> getData();를 시도했다. $ f = $ formData-> getAnswer(); 하지만 오류가 발생합니다 : 오류 : 비 객체에서 getAnswer() 멤버 함수를 호출하십시오. – Otonel

+0

symfony에서 getter 및 setter를 생성 했습니까? 'php bin/console doctrine : generate : entities AppBundle/Entity/Answer'? ?? 이렇게하면 자동으로 생성되고, Answers.php를 열어 변경된 사항을 볼 수 있습니다. 그것은 "Answers.php ~"파일에 백업을 저장합니다. –

+0

나는 이미 내 대답 엔티티에 getters와 setters가있다. 어쨌든 콘솔에서 명령을 수행했습니다. – Otonel

0

양식이 유효한지 확인하려고 했습니까?

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

은 또한 설정하고 표시 형태의 오류가 무엇이 잘못되었는지 확인하기 위해, 많은 도움과 양식의 일부 것은 정확하지 않습니다 수 있습니다.

+0

'$ form-> isValid()'를 추가했는데 응답을 제출할 때 컨트롤러가 질문을 다시 작성하려고합니다. 내 양식이 유효하지 않습니다. – Otonel

+0

양식 오류를 가져 와서 나뭇 가지에 표시하려면 코드에 추가했습니다. 답변을 제출할 때 나뭇 가지에 질문이 다시 작성되면 덤프되는 오류가 없습니다. 선택 사항이 제출되고 선택 사항이 올바르게 나뭇 가지로 표시 될 때만 양식에 오류가 표시되지 않습니다. – Otonel

+0

@ Alvin Bunk. 코드를 편집했는데 이제 드롭 다운 목록이 나타납니다. 좋은 점은 선택한 답변이 매번 정확하게 나뭇 가지에 표시된다는 것입니다. 유일한 문제는 목록에 모든 질문에 대한 내 데이터베이스의 모든 대답이 포함되어 있다는 것입니다. – Otonel

관련 문제