Ich benutze tatsächlich Symfony2 mit HateoasBundle von Will Durand, und ich vermisse die eingebettete Ressource.Symfony2 Hateoas - Meine eingebettete Ressource erscheint zweimal in meinen serialisierten Daten
Ich habe 2 Einheiten, Benutzer und BlogArticle. BlogArticle enthält eine "user" -Eigenschaft mit einer ManyToOne-Beziehung.
Kazooi\ApiBundle\Entity\BlogArticle:
exclusion_policy: none
relations:
-
rel: self
href:
route: kazooi_api_blog_article_show
parameters:
id: expr(object.getId())
absolute: true
-
rel: user
href:
route: kazooi_api_user_show
parameters:
id: expr(object.getUser())
absolute: true
embedded:
content: expr(object.getUser())
exclusion:
exclude_if: expr(object.getUser() === null)
Das Ergebnis ist:
class BlogArticle implements ResourceInterface
{
/**
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* ORM\Column(name="user_id", type="integer", nullable=false)
*
* @ORM\ManyToOne(targetEntity="Kazooi\ApiBundle\Entity\User", fetch="EAGER")
* @ORM\JoinColumn(name="user_id", nullable=false)
*/
private $user;
...
}
Hier meine serialisierten Daten in meiner Datei "Entity.BlogArticle.yml" ist
{
"id": 1,
"user": {
"id": 1,
"username": "coolfarmer",
"username_canonical": "coolfarmer",
"email": "[email protected]",
"email_canonical": "[email protected]",
"deleted": false,
"_links": {
"self": {
"href": "http://api.kazooi.dev/1.0/users/1"
}
}
},
"title": "Ouverture de Kazooi",
"message": "Lorém ipsum dolor sit amet, consectetur adipisicing elit",
"date": "2016-02-24T00:00:00+0000",
"tags": "one, two, three",
"deleted": false,
"_links": {
"self": {
"href": "http://api.kazooi.dev/1.0/blog/articles/1"
},
"user": {
"href": "http://api.kazooi.dev/1.0/users/1"
}
},
"_embedded": {
"user": {
"id": 1,
"username": "coolfarmer",
"username_canonical": "coolfarmer",
"email": "[email protected]",
"email_canonical": "[email protected]",
"deleted": false,
"_links": {
"self": {
"href": "http://api.kazooi.dev/1.0/users/1"
}
}
}
}
}
So ist das Problem, dass die Benutzerdaten erscheinen zweimal in der Benutzereigenschaft (wegen der Doktrinbeziehung ManyToOne) und in _embedded aufgrund meiner Hateoas-Beziehungsdefinition.
Es ist normal? Was ich falsch mache oder nicht verstehe. Ich habe mir gedacht, dass das Ergebnis sollte gleich sein, aber die Benutzereigenschaft gleich "1", nicht die Daten.
PS: Entität in LAZY oder EXTRA LAZY ändert nicht das Ergebnis.
Danke für Ihre Hilfe.
So _embedded völlig nutzlos ist, wenn Sie Lehre verwenden. Es gibt eine Möglichkeit, den hadoas Resolver für einige Anrufe auf OFF zu setzen. Konzept ist cool, aber wenn der Resolver 100% für jeden Anruf auflösen, wird die Leistung beeinträchtigt. – coolfarmer
Sie können [groups] (http://jmsst.com/libs/serializer/master/cookbook/exclusion_strategies#creating-different-views-of-your-objects) verwenden, um zu verwalten, ob Eigenschaften/Relationen auf der Basis von/ausgeschlossen werden sollen die Bitte, wenn du das meinst. Sie arbeiten auch mit 'Hateoas', da es nur eine Erweiterung des' JMSSerializers' ist. –