2017-05-08 5 views
0

Ich verwende Symfony 3, FosRestBundle und JsmSerializerBundle.SF3 - Entitätsname mit JmsSerializer hinzufügen

Ich möchte den Namen der Entität in meiner JSON-Antwort hinzufügen.

Exemple:

{ 
    'user': 
    { 
     'id': 0 
     'firstName': 'John', 
     'lastName': 'Doe', 
     'posts': [ 
     { 
      'id': 0, 
      'name': 'post name #1' 
     }, 
     { 
      'id': 1, 
      'name': 'post name #2' 
     }, 
     ] 
    } 
} 

Wo 'user' eine Einheit Mitglied ist und poste ein Unternehmen Post.

Was ist der beste Weg, um mein Json zu bauen?

Antwort

0

Erstens ist Ihre JSON nicht gültig 'Beiträge' kann Objekt {} anstelle von Array [] sein, und dupliziert Schlüssel 'Post' ist nicht erlaubt.

Um den Typ jeder Entität zu bekommen, kann man dafür in jeder Entität eine Eigenschaft hinzufügen.

/** 
* @var string 
* @Serializer\Expose() 
*/ 
private $entityType = 'user'; 

... und json wie folgt aussieht:

{ 
    "id": 0, 
    "entityType": "user", 
    "firstName": "John", 
    "lastName": "Doe", 
    "posts": [ 
    { 
     "id": 0, 
     "entityType": "post", 
     "name": "post name #1" 
    }, 
    { 
     "id": 1, 
     "entityType": "post", 
     "name": "post name #2" 
    } 
    ] 
} 

Edit1: ein Antwortobjekt Erstellen der Entität

class GetUserResponse 
{ 
    /** 
    * @var User 
    * @Serializer\Expose() 
    * @Serializer\SerializedName(name="user") 
    */ 
    protected $user; 
} 

{ 
    'user': 
    //.... 
} 
+0

zurückkehren sollte wickeln Ich habe Redigiert mein Json, um den Pfosten/die Pfosten zu korrigieren. entityType könnte eine Lösung sein. Ich bevorzuge den EntityType außerhalb der Entitätsdaten. Ist das möglich ? Vielleicht mit einem Normalizer? – Sancho

+0

Mit dieser Modifikation ist nur der Benutzertyp erforderlich, da die anderen (Posts) den Namen basierend auf der Eigenschaft erhalten. In diesem Fall können Sie Ihre Rückgabe vor dem Senden an den Konsumenten einfach umbrechen, siehe @ edit1 in der obigen Antwort – rafrsr

Verwandte Themen