2015-02-11 59 views
1

我想用Symfony2,FosRestBundle和JMSSerializer構建一個RESTful API,並且一切工作都很完美,直到我嘗試堅持使用任何類型的實體協會。這對標準的symfony版本來說非常有用,它足以將表單字段設置爲「實體」類型,並且框架更新了交叉表。但是,當我嘗試在REST設置上執行相同操作時,出現與「類別」表單字段相關的錯誤「注意:數組到字符串轉換」以及500錯誤。symfony fosrestbundle - 如何發佈關聯實體的記錄(多對多)

我該如何堅持使用API​​的相關實體?

實體Serie.php

/** 
* @ORM\ManyToMany(targetEntity="Category", inversedBy="series") 
* @ORM\JoinTable(name="categories_series") 
*/ 
private $categories; 

形式SerieType.php

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ->add('categories', 'entity', array(
      'multiple' => true, 
      'expanded' => false, 
      'property' => 'name', 
      'class' => 'My\Bundle\CoreBundle\Entity\Category' 
     )) 
     ->add('name') 
     ->add('description') 
     ->add('status', 'checkbox', array('required' => false)) 
     ->add('save', 'submit') 
    ; 
} 

public function setDefaultOptions(OptionsResolverInterface $resolver) 
{ 
    $resolver->setDefaults(array(
     'data_class' => 'My\Bundle\CoreBundle\Entity\Serie', 
     'csrf_protection' => false 
    )); 
} 

public function getName() 
{ 
    return 'serie'; 
} 

和SerieController.php

/** 
* @POST("", name="serie_new") 
*/ 
public function newAction(Request $request){ 

    $serie = new Serie(); 

    $form = $this->createForm(new SerieType(), $serie); 
    $form->submit($request->request->get($form->getName())); 

    if($form->isValid()){ 
     $em = $this->getDoctrine()->getManager(); 

     $em->persist($serie); 
     $em->flush(); 

     $view = $this->routeRedirectView('serie_index'); 
     return $this->handleView($view); 
    } 

和JSON POST請求:

{ 
"serie": { 
    "categories":[ 
     {"id":1,"name":"Category 1"}, 
     {"id":2,"name":"Category 2"} 
     ], 
    "name":"asasdasd", 
    "description":"sadsads", 
    "status":true 
} 

回答

0

嘗試顯示實體時可能會生成錯誤。嘗試將__toString()方法添加到您的類別實體。

而您應該使用DataTransformer以便在嘗試提交POST請求時能夠識別該類別。

+0

我認爲DataTransformer會解決這個問題,我想知道是否有任何方法使這項工作成爲可能,比如傳統表單和「handlerequest」 – Carlo 2015-02-12 16:02:45

+0

DataTransformer在您呈現或提交表單時使用,而不是當你在你的json響應中呈現內容時。 – Stev 2015-02-17 08:18:42