symfony fosrestbundle-如何发布带有关联实体(多对多)的记录


symfony fosrestbundle - How to post a record with associated entities (many-to-many)

我正在尝试用Symfony2、FosRestBundle和JMSSerializer构建一个RESTful API,一切都很完美,直到我尝试持久化具有任何关联的实体。这在标准symfony版本中是开箱即用的,将表单字段设置为"实体"类型就足够了,框架更新了交叉表。然而,当我尝试在REST设置中执行同样的操作时,我会得到与"categories"表单字段相关的错误"Notice:Array-to-string conversion"和一个500错误。

我应该如何使用API持久化相关实体?

实体序列.php

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

a表单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';
}

和一个系列控制器.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
}

在尝试显示实体时可能会生成错误。尝试将__toString()方法添加到类别实体中。

您应该使用DataTransformer,以便在尝试提交POST请求时能够识别类别。