2017-09-28 1 views
0

symfonyのJMSグループ内のフィールドのみをシリアル化できますか?グループ内のシリアル化された値jms symfony

return $this->json($products, Response::HTTP_CREATED, [], 
     ['groups' => ['user']]); 

私はすべてのユーザーの詳細ではなく、ユーザーIDのみをシリアル化したいと考えています。 アイデア

EDIT:メソッドjson()はControllerTraitに属します。

答えて

0

機能ControllerTrait::jsonは、symfony/serializerであり、jms/serializerではありません。

JMSシリアライザは複雑なシリアライゼーション/デシリアライズを実行する手段を提供しますが、Symfonyのシリアライザはそれらの機能のサブセットのみを持ちます。おそらく、JMSのシリアライザずに逃げる、ちょうどあなたの使用を確認して行うことができます:

Symfony\Component\Serializer\Annotation\Groups 

の代わり:

JMS\Serializer\Annotation\Groups 

class User 
{ 
    /** 
    * @Groups({"simple", "super_simple"}) 
    */ 
    private $id; 

    /** 
    * @Groups({"full"}) 
    */ 
    private $username; 

    /** 
    * @Groups({"full"}) 
    */ 
    private $token; 

    /** 
    * @var Role 
    */ 
    private $role; 
} 

class Role{ 
    /** 
    * @Groups({"simple"}) 
    */ 
    private $id; 

    /** 
    * @Groups({"full"}) 
    */ 
    private $description; 
} 

そして、あなた可能性do:

$role = new Role(1, "Some role"); 
$user = new User(1, "foo", "bar", $role); 

// Returns ids of both User and Role 
$ids = $this->json($user, Response::HTTP_CREATED, [], ['groups' => ['simple']]); 

// Returns id of User entity only (note the different group) 
$ids = $this->json($user, Response::HTTP_CREATED, [], ['groups' => ['super_simple']]); 

ちょうど、シリアル化注釈が有効になっていることを確認してください(framework)。 serializerenable_annotationstrueあなたconfig.yml

では、この上のドキュメントを参照してください:

https://symfony.com/doc/current/serializer.html#using-serialization-groups-annotations

ホープ、これはビットを助け...

+0

[OK]を、それでも、私はsymfonyのを使用する場合/シリアライザ方法ユーザー全体ではなく、ユーザーエンティティからIDだけを抽出できますか?私は次のようなものを試しました:['groups' => ['user']。['id']]しかし明らかにその機能していない.. – IleNea

+1

上記の更新を参照してください... –

+0

あなたのアプローチは分かります。 ['groups'] => ['consumer']アノテートされている他のクラスのフィールドは、どのように表示できますか?それは私が達成しようとしていたことです。 – IleNea

関連する問題