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で始まる注釈を定義しようとしました\が、それは役に立ちませんでした
  • キャッシュを100万回クリアしました
  • 同様の例外を検索しましたが、すべてタイプミスが原因であると思われ、過去48時間タイプミスをチェックしましたが、見つかりません。

クラスはで自動生成されましapp/consoleた。

4

2 に答える 2

2

GitHubでこの問題を見てください:https ://github.com/schmittjoh/JMSSerializerBundle/issues/123

于 2012-10-19T19:31:31.657 に答える
0

このソリューションは機能します!私はJMSSerializerBundleを使用しており、SerializedEntityでManyToOne関係があります。私は財産を使いました$product、そしてもちろんsetterそしてgetterそのために。シリアライザーが製品を取得しようとすると、関連するエンティティを文字列/整数に変換する方法がわからないため、これと同じメッセージが表示されます。カスタムメソッドでAccessorを追加するgetProductIdと、このメソッド内で

$this->product->getId()

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

これにOneToMany関連して、カスタムgetメソッドではArrayCollectionをArrayとして返します$this->statuses->toArray()

関係エンティティのcoonverterも考えられますが、私は試していません(時間がない)

于 2021-08-10T13:39:38.673 に答える