4

JMSSerializerBundle でこの問題が発生しています。基本的に、私がすでに行ったことの例外を与えてくれます。これは私のエンティティです:

注釈行に関する混乱を避けるために編集

<?php

namespace My\ProjectBundle\Entity;
use JMS\SerializerBundle\Annotation\Type;

use Doctrine\ORM\Mapping as ORM;

/**
 * My\ProjectBundle\Entity\Music
 * 
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="My\ProjectBundle\Entity\MusicRepository")
 */
class Music extends Post
{
/**
 * @var integer $id
 * 
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
protected $id;

/**
 * @var string $album
 *
 * @ORM\Column(name="album", type="string")
 * @Type("string")
 */
protected $album;

/**
 * @var string $artist
 *
 * @ORM\Column(name="artist", type="string")
 * @Type("string")
 */
protected $artist;

/**
 * @var integer $duration
 *
 * @ORM\Column(name="duration", type="bigint")
 * @Type("int")
 */
protected $duration;

/**
 * @var string $title
 *
 * @ORM\Column(name="title", type="string")
 * @Type("string")
 */
protected $title;

/**
 * @var array $genres
 *
 * @ORM\Column(name="genres", type="array")
 * @Type("array")
 */
protected $genres;

ご覧のとおり@Type()、フィールドに注釈を追加しましたが、呼び出し時に例外が発生します。

$listenedMusic = $serializer->deserialize($content, 'My\ProjectBundle\Entity\Music', 'json');

確認したところ、$content変数は空ではなく、すべてのフィールドが JSON 形式でマップされています。

私のMonologファイルでは、これは正確な例外です:

[2012-11-29 23:39:07] request.CRITICAL: JMS\SerializerBundle\Exception\RuntimeException: 
You must define a type for My\ProjectBundle\Entity\Music::$album. (uncaught exception) 
at /vendor/jms/serializer-bundle/JMS/SerializerBundle/Serializer/GenericDeserializationVisitor.php line 177

それでもこの例外が発生するのはなぜですか?

4

3 に答える 3

4

注釈全体の異なる部分を持つ2つのコメント文字列があるためだと確信しています。symfony は、クラス メンバーの直前のコメント文字列のみを調べます。

置き換えてみてください:

/** @Type("string")*/
/**
 * @var string $album
 *
 * @ORM\Column(name="album", type="string")*/
protected $album;

と:

/** 
 * @Type("string")
 *
 * @var string $album
 *
 * @ORM\Column(name="album", type="string")*/
protected $album;

(そして、他のすべての場所には、これらの重複した注釈コメントがあります)

あくまでも推測ですが、解決すると思います。私がこれをやろうとしたとき:

class Something
{
    /**
     * @var integer $id
     * 
     * @ORM\Column(name="id", type="bigint", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    /**
     * 
     */
    private $id;
}

...Symfonyは私にこのエラーを与えました:

No identifier/primary key specified for Entity 'SomeApp\SomeBundle\Entity\Something'. Every Entity must have an identifier/primary key.
于 2012-11-30T00:50:22.537 に答える
1

dev-masterプロジェクト全体をパッケージに更新することでこれを修正しました。コードを変更せずにこのエラーが発生しなくなったため、JMSSerializer のバグのようでした。

于 2013-01-25T12:55:05.760 に答える
0
/**
 * @var integer $duration
 *
 * @ORM\Column(name="duration", type="bigint")
 * @Type("int")
 */
protected $duration;

'int' 型はシリアル化には存在しません。'integer' を使用する必要があります。

于 2015-03-19T15:16:44.227 に答える