Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php symfony fosrestbundle-如何发布具有关联实体的记录(多对多)_Php_Rest_Symfony_Fosrestbundle - Fatal编程技术网

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

Php symfony fosrestbundle-如何发布具有关联实体的记录(多对多),php,rest,symfony,fosrestbundle,Php,Rest,Symfony,Fosrestbundle,我正在尝试用Symfony2、FosRestBundle和JMSSerializer构建一个RESTful API,在我尝试持久化一个具有任何类型关联的实体之前,一切都可以完美地工作。这在标准symfony版本中是现成的,它足以将表单字段设置为实体类型,并且框架更新了交叉表。但是,当我尝试在REST设置上执行相同操作时,我会收到以下错误通知:与categories表单字段相关的数组到字符串转换以及一个500错误 如何使用API持久化相关实体 实体Serie.php /** * @ORM\Man

我正在尝试用Symfony2、FosRestBundle和JMSSerializer构建一个RESTful API,在我尝试持久化一个具有任何类型关联的实体之前,一切都可以完美地工作。这在标准symfony版本中是现成的,它足以将表单字段设置为实体类型,并且框架更新了交叉表。但是,当我尝试在REST设置上执行相同操作时,我会收到以下错误通知:与categories表单字段相关的数组到字符串转换以及一个500错误

如何使用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
}

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


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

我认为DataTransformer可以解决这个问题,我想知道是否有任何方法可以使这项工作开箱即用,就像传统表单和HandlerRequesta一样,在您提交表单时使用DataTransformer,当您在json响应中呈现内容时,情况并非如此。