Symfony Fosrestbundle — Как опубликовать запись с ассоциированными объектами (многие ко многим)

Я пытаюсь создать RESTful API с Symfony2, FosRestBundle и JMSSerializer, и все работает идеально, пока я не попытаюсь сохранить сущность с какой-либо ассоциацией. Это работает «из коробки» со стандартной редакцией Symfony, достаточно установить поле формы в качестве типа «entity», и среда обновит перекрестную таблицу. Однако, когда я пытаюсь сделать то же самое в настройке REST, я получаю эту ошибку «Примечание: преобразование массива в строку», связанную с полем формы «категории», и ошибкой 500.

Как я должен сохранять связанные сущности с помощью API?

Entity 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
}

1

Решение

Ваша ошибка, вероятно, генерируется при попытке отобразить сущность. Попробуйте добавить метод __toString () к вашему объекту категории.

И вы должны использовать DataTransformer, чтобы иметь возможность идентифицировать категорию при попытке отправить запрос POST.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]