Bazinga Hateoas与Symfony的多个链接

时间:2014-10-22 10:42:47

标签: symfony hateoas

我在我的SF2项目中使用了Bazinga Hateoas和Fosrest。

在API调用之一中,我想显示朋友的链接,其中包含当前用户或用户ID,如下所示:

    {
        "_links": {
            "self": { "href": "/users/1" },
            "friends": [
              { "href": "/users/2" },
              { "href": "/users/3" },
            ]
        },
    }

我在Entity.User.yml文件中使用以下代码:

relations:
    -
      rel: self
      href:
        route: api_1_get_users
        parameters:
          id: expr(object.getId())
        absolute: true
    -  
      rel: expr(object.findFriends(object.getId()))
      href:
        route: api_1_get_users
        parameters:
          id: expr(object.getId())
        absolute: true

我已经把#34; findFriends"存储库中的方法,但在yml文件中无法访问。我想这不是正确的做事方式。

我已经完成https://github.com/willdurand/Hateoas但无法弄清楚如何做到这一点。请指导我如何实现这一目标......

非常感谢任何帮助!

请指导我如何实现这个目标

1 个答案:

答案 0 :(得分:2)

这是您使用 @RelationProvider 的方式。

/**
 * Note:
 * ====
 * RelationProvider takes the method name which returns the relations.
 * 
 * @Hateoas\RelationProvider("addRelations")
 */
class LinkContainingResource
{
    public function addRelations($object, ClassMetadataInterface $classMetadata)
    {
        /**
         * Important Note:
         * ===============
         * Relation is actually an Hateoas\Configuration\Relation object,
         * NOT \Hateoas\Configuration\Annotation\Relation
         */
        return [new Relation('relation_name', 'link1'),
                new Relation('relation_name', 'link2'),
                new Relation('relation_name', 'link3')];
    }
}

Json / Hal结果:

{
  "_links": {
    "relation_name": [
      {"href": "link1"},
      {"href": "link2"},
      {"href": "link3"}
    ]
  }
}