Lun*_*una 1 serialization json bundle symfony
我遇到了JMSSerializerBundle的问题.
我在那里有我的实体AGVote:
<?php
namespace K\AGBundle\Entity;
use JMS\SerializerBundle\Annotation\Type;
use JMS\SerializerBundle\Annotation\Accessor;
use JMS\SerializerBundle\Annotation\AccessType;
use JMS\SerializerBundle\Annotation\Exclude;
use JMS\SerializerBundle\Annotation\ExclusionPolicy;
use Doctrine\ORM\Mapping as ORM;
/**
* K\AGBundle\Entity\AGVote
* @ORM\Entity
* @ORM\HasLifecycleCallbacks
*
*/
/*
*
/** @AccessType("public_method") */
class AGVote
{
/**
* @Type("integer")
* @Accessor(getter="getId")
*/
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
public $id;
/**
* @ORM\Column(type="text")
* @Accessor(getter="getQuestion")
* @Type("text")
*/
public $question;
/**
* @ORM\Column(type="smallint")
* @Type("integer")
* @Accessor(getter="getActif")
*/
public $actif;
/**
* @ORM\ManyToOne(targetEntity="\K\KBundle\Entity\Users", cascade={"all"})
* @Exclude
*/
protected $users;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set question
* Nb : Only AG admin can set a question
* @param text $question
*/
public function setQuestion($question)
{
$this->question = $question;
}
/**
* Get question
*
* @return text
*/
public function getquestion()
{
return $this->question;
}
/**
* Set actif
*
* @param smallint $actif
*/
public function setActif($actif)
{
$this->actif = $actif;
}
/**
* Get actif
*
* @return smallint
*/
public function getActif()
{
return $this->actif;
}
/**
* Set Users
*
* @param K\KBundle\Entity\Province $Users
*/
public function setUsers(\K\KBundle\Entity\Users $users)
{
$this->users = $users;
}
/**
* Get Users
*
* @return K\KBundle\Entity\Users
*/
public function getUsers()
{
return $this->users;
}
public function __toString()
{
return $this->getquestion();
}
}
Run Code Online (Sandbox Code Playgroud)
我已经制作了一个控制器,juste在Json中给我一个AGVote实体:
public function jsonvoteAction($id) {
$em = $this->getDoctrine()->getEntityManager();
$entity = $em->getRepository('KAGBundle:AGVote')->findOneById($id);
if ($entity->getActif() == 1) {
$serializer = $this->container->get('serializer');
$serializer->serialize($entity, 'json');
$response = new Response($serializer);
return $reponse;
}
}
Run Code Online (Sandbox Code Playgroud)
我在Json有回应,但这是一个错误说:
[{"message":"Response内容必须是实现__toString()的字符串或对象,\"object \"给定.","class":"UnexpectedValueException","trace":
实际上我已经在我的所有实体中实现了一个__toString()方法.
有没有人有想法?
谢谢 :)
当你调用serialize
方法时$serializer
,它返回序列化数据(一个字符串).问题是你不使用这个返回的值,并用$serializer
自己创建响应,这是没有意义的.
首先,存储序列化的$实体:
$serializedEntity = $serializer->serialize($entity, 'json');
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用字符串返回新的响应:
return new Response($serializedEntity, 200, array('Content-Type' => 'application/json'));
Run Code Online (Sandbox Code Playgroud)