Symfony 2 - 使用Json检索实体,返回另一个实体

时间:2012-08-17 20:02:09

标签: symfony doctrine-orm json

我在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但事件。 当我想清除缓存时,它失败并出现错误:

见: JMSSerializerBundle Installation : Catchable Fatal Error: Argument 1 passed to JMSSerializerBundle\Twig\SerializerExtension::__construct()

1 个答案:

答案 0 :(得分:1)

默认情况下,json_encode仅使用公共属性。 因此,它序列化了AGVote$users的唯一公共属性。 $users的内容是User的一个实例;哪些公共领域被序列化。

您可以通过向实体添加toArray()方法然后执行json_encode($entity->toArray())来解决这些问题,但我强烈建议您查看并使用 JMSSerializedBundle