ReflectionException:类ArrayCollection不存在

时间:2012-10-19 17:36:44

标签: arrays symfony doctrine-orm jmsserializerbundle

我正在尝试序列化移动摘要的实体。我有这个实体类:

use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
use FOS\UserBundle\Entity\User as BaseUser;

/**
 * xxx\xxx\Entity\User
 *
 * @ORM\Table()
 * @ORM\Entity()
 * @ORM\Entity(repositoryClass="xxx\xxx\Entity\UserRepository")
 */
class User extends BaseUser
{
    /**
     *
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @var \Doctrine\Common\Collections\ArrayCollection
     *
     * @ORM\OneToMany(targetEntity="\xxx\xxx\Entity\Music", mappedBy="user")
     */
    protected $musics;

    /**
     * @var \Doctrine\Common\Collections\ArrayCollection
     *
     * @ORM\OneToMany(targetEntity="\xxx\xxx\Entity\Message", mappedBy="user")
     */
    protected $messages;

    /**
     * @var \Doctrine\Common\Collections\ArrayCollection
     *
     * @ORM\OneToMany(targetEntity="\xxx\xxx\Entity\Location", mappedBy="user")
     */
    protected $locations;

    public function __construct()
    {
        parent::__construct();
        $this->musics = new ArrayCollection();
        $this->messages = new ArrayCollection();
        $this->locations = new ArrayCollection();
    }
}

现在,当我在DefaultController.php

中调用此行时
$user = $this->getUser();
$em = $this->getDoctrine()->getManager();

$array = $em->getRepository('xxxBundle:User')
    ->findLatest();

$serializer = $this->get('serializer');
$response = $serializer->serialize($array, 'json'); //THIS LINE THROWS EXCEPTION

我在use Doctrine\Common\Collections\ArrayCollection;中有DefaultController.php,但似乎错误来自JMSSerializerBundle内部。

我从未尝试过什么

  • 我尝试定义Doctrine注释以\开头,但这没有帮助
  • 我已经清理了一百万次缓存
  • 我搜索过类似的例外情况,但它们似乎都是由一个错字引起的,我在过去48小时内检查了拼写错误,但我找不到。

使用app/console自动生成类。

2 个答案:

答案 0 :(得分:2)

答案 1 :(得分:0)

此解决方案有效! 我正在使用 JMSSerializerBundle 并且在序列化实体中我有 ManyToOne 关系。为此,我使用了属性 $product,当然还有 settergetter。如果序列化程序尝试获取产品,我会收到同样的消息,因为它不了解如何将相关实体转换为字符串/整数。我使用自定义方法 getProductId 添加访问器并在此方法中返回

$this->product->getId()

JMS\Serializer\Annotation as Serializer @Serializer\Accessor(getter="getProductId")

OneToMany 关系中,在自定义 get 方法中,我将 ArrayCollection 返回为 Array $this->statuses->toArray()

关系实体也可以考虑转换器,不过我没试过(没时间)