我正在使用FOSRestBundle创建新的地方实体,但我遇到数据变形金刚的问题,我的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';
}
}
和我的地方实体类:
<?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;
和我的PlacesConroller类:
<?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);
}
}
我的问题是当我发送像
这样的帖子请求时{&#34; new_place&#34;:{&#34; name&#34;:&#34; Solomon&#34;,&#34;&#34;:&#34;某处&#34;, &#34; city&#34;:{&#34; id&#34;:1,&#34; name&#34;:&#34; syria&#34;},&#34; lat&#34;:33.33 &#34; LNG&#34;:33.33}}
到 postPlacesAction 我收到错误
{message:&#34;未找到实体。&#34;,类:&#34; Doctrine \ ORM \ EntityNotFoundException&#34;,...} class:&#34; Doctrine \ ORM \ EntityNotFoundException&#34; 消息:&#34;未找到实体。&#34;
。有一个更好的方法来处理FOSRestBundle中的实体表单字段和我有类型字段作为多个实体的地方我如何在RestBundle中使用它。
答案 0 :(得分:0)
我发现了我的问题。当表单被提交时,它返回城市的实体对象,但是当我打电话时。
$view = View::create($form->getData(),200);
序列化城市对象的原因问题。