Php 数据转换器不工作FOSRestBundle

Php 数据转换器不工作FOSRestBundle,php,symfony,doctrine-orm,fosrestbundle,Php,Symfony,Doctrine Orm,Fosrestbundle,我正在使用FOSRestBundle创建新的place实体,但我的数据转换器有问题,我的placeType代码是: <?php namespace Acme\PlacesBundle\Form; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolverInte

我正在使用FOSRestBundle创建新的place实体,但我的数据转换器有问题,我的placeType代码是:

<?php

namespace Acme\PlacesBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use FOS\RestBundle\Form\Transformer\EntityToIdObjectTransformer;

class PlacesType extends AbstractType
{
    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $em = $options['em'];
        $cityTransformer = new EntityToIdObjectTransformer($em ,'AcmePlacesBundle:CityDB' );
        $typesTransformer = new ManyToEntityTransformer($em, 'AcmePlacesBundle:Type' );
        $builder
            ->add('name','text',array('label' => 'form.name'))
            ->add('vicinity','text',array('label' => 'form.vicinity'))
            ->add($builder->create('city', 'text')->addModelTransformer($cityTransformer))
            ->add('lat','number',array('label' => 'form.lat'))
            ->add('lng','number',array('label' => 'form.lng'))

        ;
    }

    /**
     * @param OptionsResolverInterface $resolver
     */
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'Acme\PlacesBundle\Entity\Places',
            'csrf_protection' => false,
            'validation_groups' => array('info', 'Default'),
            'translation_domain' => 'PlacesBundle',
            'em' => null,

        ))
            ->setRequired(array('em'))
            ->setAllowedTypes('em', 'Doctrine\Common\Persistence\ObjectManager');
    }

    /**
     * @return string
     */
    public function getName()
    {
        return 'new_place';
    }
}

我发现了我的问题。当表单提交时,返回城市的实体对象,但当我调用时。
$view=view::create($form->getData(),200)

其原因是序列化城市对象时出现问题

<?php

namespace Acme\PlacesBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\HttpFoundation\File\UploadedFile;

/**
 * Places
 *
 * @ORM\Table(name="places")
 * @ORM\Entity(repositoryClass="\Acme\PlacesBundle\Entity\PlacesRepository")
 * @ORM\HasLifecycleCallbacks
 */
class Places
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @var string $name
     *
     * @ORM\Column(name="name", type="string", length=70 ,unique=false, nullable=false)
     * 
     */
    protected $name;

    /**
     * @var string $vicinity
     *
     * @ORM\Column(name="vicinity", type="string", length=100 ,unique=false, nullable=false)
     * 
     */
    protected $vicinity;

    /**
     * @var float $lat
     *
     * @ORM\Column(name="lat", type="float" ,unique=false, nullable=false)
     * 
     */
    protected $lat;

    /**
     * @var float $lng
     *
     * @ORM\Column(name="lng", type="float" ,unique=false, nullable=false)
     * 
     */
    protected $lng;

    /**
     * @ORM\ManyToOne(targetEntity="CityDB")
     * @ORM\JoinColumn(name="city_id", referencedColumnName="id")
     **/
    protected $city;

     /**
     * @ORM\ManyToMany(targetEntity="Type")
     * @ORM\JoinTable(name="places_types",
     *      joinColumns={@ORM\JoinColumn(name="place_id", referencedColumnName="id")},
     *      inverseJoinColumns={@ORM\JoinColumn(name="type_id", referencedColumnName="id")}
     *      )
     **/
    protected $types;
<?php

namespace Acme\PlacesBundle\Controller;

use FOS\RestBundle\Controller\FOSRestController;
use Symfony\Component\HttpFoundation\Request;
use Acme\PlacesBundle\Entity\Places;
use FOS\RestBundle\View\View;
/**
 * Description of PlacesAPI
 *
 * @author Slaiman
 */
class PlacesController extends FOSRestController
{
    public function postPlacesAction(Request $request)
    {
        $place = new Places();
        $form = $this->createForm('new_place', $place, array('em' => $this->getDoctrine()->getManager()));
        $form->handleRequest($request);

        if ($form->isValid()) {
            $view = View::create($form->getData(),200);
        } else {
            $view = View::create($form, 400);
        }
        return $this->handleView($view);

    }
}