我在json_encodeing一个实体时遇到了问题。
public function jsonvoteAction($id) {
$em = $this->getDoctrine()->getEntityManager();
$entity = $em->getRepository('KorumAGBundle:AGVote')->findOneById($id);
$response = new Response(json_encode($entity, 200));
$response->headers->set('Content-Type',' application/json');
return $response;
}
此代码返回一个用户实体
{"users":{"__isInitialized__":false,"id":null,"nickname":null,"pwd":null,"email":null,"firstname":null,"lastname":null,"poste":null,"addr1":null,"addr2":null,"pc":null,"country":null,"phone":null,"province":null,"acess":null,"site":null,"crew":null,"utilisateur":null}}
当我对我的$实体进行var dymp时,它会返回我的AGVote和USers实体。
这是我的AGVote实体
<?php
namespace Korum\AGBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Korum\AGBundle\Entity\AGVote
* @ORM\Entity
* @ORM\HasLifecycleCallbacks
*/
class AGVote
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*
*/
private $id;
/**
* @ORM\Column(type="text")
*/
private $question;
/**
* @ORM\Column(type="smallint")
*/
private $actif;
/**
* @ORM\ManyToOne(targetEntity="\Korum\KBundle\Entity\Users", cascade={"all"})
*/
public $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 Korum\KBundle\Entity\Province $Users
*/
public function setUsers(\Korum\KBundle\Entity\Users $users)
{
$this->users = $users;
}
/**
* Get Users
*
* @return Korum\KBundle\Entity\Users
*/
public function getUsers()
{
return $this->users;
}
}
有没有人知道发生了什么?
我尝试使用版本1.1的元数据库安装JSMSerializerBundle但事件。 当我想清除缓存时,它失败并出现错误:
答案 0 :(得分:1)
默认情况下,json_encode
仅使用公共属性。
因此,它序列化了AGVote
:$users
的唯一公共属性。 $users
的内容是User
的一个实例;哪些公共领域被序列化。
您可以通过向实体添加toArray()方法然后执行json_encode($entity->toArray())
来解决这些问题,但我强烈建议您查看并使用 JMSSerializedBundle 强>