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
}
我認爲DataTransformer會解決這個問題,我想知道是否有任何方法使這項工作成爲可能,比如傳統表單和「handlerequest」 – Carlo 2015-02-12 16:02:45
DataTransformer在您呈現或提交表單時使用,而不是當你在你的json響應中呈現內容時。 – Stev 2015-02-17 08:18:42