2

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

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注释定义为以 a 开头\,但这没有帮助
  • 我已经清除了我的缓存一百万次
  • 我搜索了类似的异常,但它们似乎都是由拼写错误引起的,我在过去 48 小时内检查了拼写错误,但找不到。

这些类是使用自动生成的app/console

4

2 回答 2

2

看看 GitHub 上的这个问题:https ://github.com/schmittjoh/JMSSerializerBundle/issues/123

于 2012-10-19T19:31:31.657 回答
0

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

$this->product->getId()

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

相对而言,在OneToMany自定义get方法中,我将 ArrayCollection 作为 Array 返回$this->statuses->toArray()

您也可以为关系实体考虑转换器,但我没有尝试过(没时间)

于 2021-08-10T13:39:38.673 回答