2013-08-06 14 views
2

그래서이 양식을 Ajax와 함께 제출하고 싶습니다. 일반적으로 이것은 매우 쉽게 수행 할 수 있지만 현재는 포함 된 컬렉션을 올바른 방법으로 처리하지 못하므로 너무 나쁩니다.Symfony2.3에서 컬렉션을 사용하여 Ajax 양식을 처리하는 방법

답변 모음으로 질문을 만들 수있는 양식이 있습니다. 양식은 다음과 같이 생성됩니다

이제
{{ form_start(form, {'attr':{'class': 'form-horizontal', 'id': 'form'}}) }} 
     <div class="form-group"> 
      {{ form_label(form.question, null, { 'label_attr': {'class': 'col-lg-2 control-label'} }) }} 
      <div class="col-lg-5"> 
       {{ form_widget(form.question, { 'attr': {'class': 'form-control'} }) }} 
      </div> 
     </div> 
     {% for answer in form.answers %} 
      <div class="form-group"> 
       {{ form_label(answer.answer, 'Answer '~loop.index, { 'label_attr': {'class': 'col-lg-2 control-label'} }) }} 
       <div class="col-lg-5"> 
        {{ form_widget(answer.answer, { 'attr': {'class': 'form-control'} }) }} 
       </div> 
      </div> 
     {% endfor %} 
     <div class="col-lg-8"><input class="btn btn-primary pull-right" type="submit" /></div> 
    {{ form_end(form) }} 

양식을 제출, 나는 자리에이 작은 자바 스크립트를 가지고 :

$('#form').submit(function() { 
    $.ajax({ 
     type: "POST", 
     url: "{{ url('questionCreateSubmit') }}", 
     data: $(this).serialize(), 
     success: function(data) { 
      alert(data); 
     } 
    }); 

    return false; 
}); 

지금 내 컨트롤러에서 나는 그것을 처리하는 경우 테스트하려면이 있습니다 그것은 바로 :이 반환 무엇

/** 
* @Route("https://stackoverflow.com/questions/create/submit", name="questionCreateSubmit") 
*/ 
public function questionCreateSubmitAction(Request $request) 
{ 
    $question = new Question(); 

    $form = $this->createForm(new QuestionType(), $question); 
    $form->handleRequest($request); 
    die(var_dump($form->getData())); 

그러나 그것은 단지 답변의 컬렉션을 질문 속성을 설정하고 무시입니다 :

,691,363 컬렉션이 자동으로 입력 또는 I가해야 할됩니다 방법이 있나요

(
    [question] => Array 
     (
      [question] => dfsdf 
      [answers] => Array 
       (
        [0] => Array 
         (
          [answer] => sdfsdf 
         ) 
        [1] => Array 
         (
          [answer] => dsfds 
         ) 
        [2] => Array 
         (
          [answer] => fsdfsdf 
         ) 
       ) 
      [_token] => cf8781508d9002504455472d676acb1073888e67 
     ) 
) 

:210

(
    [id:Acme\DemoBundle\Entity\Question:private] => 
    [question:Acme\DemoBundle\Entity\Question:private] => dfsdf 
    [answers:Acme\DemoBundle\Entity\Question:private] => Doctrine\Common\Collections\ArrayCollection Object 
    (
     [_elements:Doctrine\Common\Collections\ArrayCollection:private] => Array 
      (
      ) 
    ) 
) 

내가 그 덤핑하여 $ _POST 변수를 확인 , 그것은 분명이 같은 배열 구조를 보여줍니다 answers 배열을 반복하고 question 객체에 채워서 모든 것을 스스로 수행해야합니다.

도움을 많이 주시면 감사하겠습니다.

+0

당신이 양식 유형 ('QuestionType')을 보여줄 수 :

$builder->add('answers', 'collection', array( 'type' => new AnswerType() )); 

하지만 내 경우에는 다음과 같이 봤는데해야합니다 문제는이처럼 보였다 내 QuestionType에 있었다? – cheesemacfly

답변

3

Nevermind, 문제가 있음을 발견했습니다.

$builder->add('answers', 'collection', array(
     'type' => new AnswerType(), 
     'allow_add' => true, 
     'allow_delete' => true 
    ));