私は実際にWill DurandのHateoasBundleでSymfony2を使用しています。Symfony2 Hateoas - 私の埋め込みリソースは、シリアル化されたデータに2回表示されます
私は2つのエンティティUserとBlogArticleを持っています。 BlogArticleには、ManyToOneリレーションを持つ「user」プロパティが含まれています。ここで
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;
...
}
私のファイルの私のシリアル化されたデータである "Entity.BlogArticle.ymlは":
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)
結果は次のとおりです。
{
"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"
}
}
}
}
}
だから、問題はそのユーザデータであります(教義の関係ManyToOneのために)ユーザのプロパティに、そして私のHateoas関係定義のために_embeddedに現れます。
これは正常ですか?私が間違ってやっていることや理解が間違っている。 私は結果が同じであってはならないが、データではなくユーザプロパティが "1"に等しいはずであることを強くお勧めします。
PS:LAZYまたはEXTRA LAZYのエンティティは結果を変更しません。
ありがとうございました。
は全く役に立たない:一部は、単に関係から
embedded
キーを削除します。一部の呼び出しで、hateoasリゾルバをOFFに設定する方法はありますか?コンセプトは素晴らしいですが、コールごとにリゾルバが100%解決すると、パフォーマンスに影響があります。 – coolfarmer[groups](http://jmsyst.com/libs/serializer/master/cookbook/exclusion_strategies#creating-different-views-of-your-objects)を使用して、プロパティ/リレーションを含める/除外するかどうかを管理できますそれがあなたが意味するものなら、要求。また、 'Hateoas'は' JMSSerializer'の拡張版なので、 'Hateoas'でも動作します。 –