2016-03-20 42 views
0

我在我的FOSRestBUndle API中有測試和問題之間的多對多關係。如果我想發佈/關聯多個問題和我通過post創建的測試,我該如何格式化我的json對象進行發佈。我目前正在獲取一個Notice:Array to string conversion。問題設置爲數組= true在我FOSRestControllerFOSRest產生一個通知:數組到字符串轉換

JSON

{ 
    "event":"1", 
    "testId":"3", 
    "module":"1", 
    "title":"Test" 
    "description":"Test", 
    "enabled":1, 
    "isSpeedTest":1, 
    "question":[1,2] 
} 

TestQuestionsType.php

<?php 

namespace TeamGraduate\APIBundle\Form; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 
use Symfony\Component\OptionsResolver\OptionsResolverInterface; 

class TestQuestionsType extends AbstractType 
{ 
    /** 
    * @param FormBuilderInterface $builder 
    * @param array $options 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('body') 
      ->add('allowableTime') 
      ->add('created', 
       'datetime', array('widget' => 'single_text', 'date_format' => 'YYYY-MM-DD hh:mm:ss')) 
      ->add('updated', 
       'datetime', array('widget' => 'single_text', 'date_format' => 'YYYY-MM-DD hh:mm:ss')) 
      ->add('enabled') 
      ->add('marks') 
      ->add('topic') 
      ->add('creatorUser') 
      ->add('test') 
      ->add('tag') 
     ; 
    } 

    /** 
    * @param OptionsResolverInterface $resolver 
    */ 
    public function setDefaultOptions(OptionsResolverInterface $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'TeamGraduate\APIBundle\Entity\TestQuestions' 
     )); 
    } 

    /** 
    * @return string 
    */ 
    public function getName() 
    { 
     return 'teamgraduate_apibundle_testquestions'; 
    } 
} 

TestsType.php

<?php 

namespace TeamGraduate\APIBundle\Form; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 
use Symfony\Component\OptionsResolver\OptionsResolverInterface; 

class TestsType extends AbstractType 
{ 
    /** 
    * @param FormBuilderInterface $builder 
    * @param array $options 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('title') 
      ->add('description') 
      ->add('created', 
       'datetime', array('widget' => 'single_text', 'date_format' => 'YYYY-MM-DD hh:mm:ss')) 
      ->add('updated', 
       'datetime', array('widget' => 'single_text', 'date_format' => 'YYYY-MM-DD hh:mm:ss')) 
      ->add('enabled') 
      ->add('isSpeedTest') 
      ->add('creatorUser') 
      ->add('event') 
      ->add('module') 
      ->add('view') 
      ->add('question', 'entity', array(
       'multiple' => true, 
       'expanded' => false, 
       'property' => 'name', 
       'class' => 'TeamGraduate\APIBundle\Entity\TestQuestions' 
      )) 
      ->add('reportCard') 
      ->add('cap') 
      ->add('tag') 
     ; 
    } 

    /** 
    * @param OptionsResolverInterface $resolver 
    */ 
    public function setDefaultOptions(OptionsResolverInterface $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'TeamGraduate\APIBundle\Entity\Tests' 
     )); 
    } 

    /** 
    * @return string 
    */ 
    public function getName() 
    { 
     return 'teamgraduate_apibundle_tests'; 
    } 
} 

我怎樣才能發佈多個問題聯繫起來與測試作爲JSON對象?

+0

你有沒有找到答案?我有同樣的問題。 –

+0

@LexHartman,看到我的回答。 –

回答

1

我使出通過接收到的問題陣列當測試張貼如下,以迭代:

/** 
    * Processes the form. 
    * 
    * @param mixed $entity 
    * @param array $parameters 
    * @param String $method 
    * 
    * @return mixed 
    * 
    * @throws \APIBundle\Exception\InvalidFormException 
    */ 
    private function processForm($entity, array $parameters, $method = "PUT") { 

     $form = $this->formFactory->create(new TestsType(), $entity, array('method' => $method)); 

     foreach($parameters as $key=>$value) 
     { 
      if(is_null($value) || (is_array($value) && empty($value))) // remove null keys and empty arrays 
       unset($parameters[$key]); 
     } 

     $form->submit($parameters, false || 'PATCH' !== $method); 
     if ($form->isValid()) { 
      $entity = $form->getData(); 

      foreach ($form['question']->getData()->getValues() as $v) { 
       $question = $this->om->getRepository('APIBundle:TestQuestions')->find($v->getQuestionId()); 
       if ($question) { 
        $question->addTest($entity); 
       } 
      } 

//   dump($entity); 
//   die(); 
      $this->om->persist($entity); 
      $this->om->flush($entity); 
      return $entity; 
     } 
     throw new InvalidFormException('Invalid submitted data', $form); 
    } 
+1

Thanx!現在我將以這種方式執行它。 –