1

Symfony2 と JMSSerializerBundle を使用して API を構築しています。グループを使用してオブジェクトをシリアル化するさまざまな方法を設定するために JMSSerializer が提供するシステムは非常に便利ですが、すべてのパラメーターでどのグループをシリアル化するかを指定する方法がありません。例:

ユーザー (著者) に関連する記事があります。記事とユーザーは「リスト」または「詳細」としてシリアル化できますが、ユーザーは常に記事から取得される「リスト」としてシリアル化される必要があります (「詳細」グループは使用のために予約されているため)ユーザーとユーザーのみを取得します)。問題は、シリアライザーを「詳細」として設定すると、作成者も「詳細」としてシリアル化されることです。

私の考えでは、コードは次のようになります。

/**
 * @var SCA\APIBundle\Entity\User
 * @Groups({"list" => "list", "details" => "list"})
 */
private $author;

ここで、配列のキーは親をシリアル化する方法を示し、値は子をシリアル化する方法を示します。

どうすればこれを達成できますか?

4

1 に答える 1

0

構成されたオブジェクトではなく、構成に対して実行する必要があります。

あなたの場合、次のようなものがあると思います:

class Article
{
    /**
     * @var User
     * @Groups({"list", "details"})
     */
    private $author;
}


class User
{
    private $firstName;
    private $lastName;
}

したがって、構成されたオブジェクトをシリアル化するときに firstName プロパティを公開する場合は、User オブジェクトで同じグループを定義する必要があります。

あれは。。。になる:

class Article
{
    /**
     * @var User
     * @Groups({"list", "details"})
     */
    private $author;
}


class User
{
    /*
     * @Groups({"list"})
     */
    private $firstName;
    private $lastName;
}

さらに制御が必要な場合は、「article-list」、「user-firstname」、「user-list-minimal」など、より明示的なグループを定義できます。

採用する最善の戦略を決定するのはあなた次第です。

于 2012-12-12T11:13:52.570 に答える