【问题标题】:Api-platform accessing embedded relations in hydra:member在 hydra:member 中访问嵌入式关系的 API 平台
【发布时间】:2019-05-17 00:26:46
【问题描述】:

我使用 Api-Platform 和 React 作为客户端。

我有一个包含其他对象的论坛实体:作者(用户实体)和类别(类别实体)。

我用@Groups 注释嵌入了这些实体,以便更轻松地检索它们。

例如,当我在 Postman 上获取 /api/forums/ 时,我得到以下结果:

{
"@context": "/api/contexts/Forum",
"@id": "/api/forums",
"@type": "hydra:Collection",
"hydra:member": [
    {
        "@id": "/api/forums/79",
        "@type": "Forum",
        "id": 79,
        "subject": "Sujet numéro 0",
        "message": "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
        "category": {
            "@id": "/api/categories/183",
            "@type": "Category",
            "title": "Category 2"
        },

看起来不错:我们可以看到我的类别对象链接到 hydra:member 数组中的论坛,以及一个“标题”字段。

但我注意到,我真正得到的结果在我的所有嵌套对象的反应应用程序中是不同的。 我只得到 IRI..

例如具有相同的请求:

...
fetch('forums')
  .then(response =>
    response
      .json()
      .then(retrieved => ({ retrieved, hubURL: extractHubURL(response) }))
  )
  .then(({ retrieved, hubURL }) => {
    retrieved = normalize(retrieved);
...

我得到这个结果:

{
"@context": "/api/contexts/Forum",
"@id": "/api/forums",
"@type": "hydra:Collection",
"hydra:member": [
    {
        "@id": "/api/forums/79",
        "@type": "Forum",
        "id": 79,
        "subject": "Sujet numéro 0",
        "message": "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
        "category": "/api/categories/183",

“类别”上的所有其他字段都消失了,我不明白为什么。

谁能帮我解决这个问题?

提前致谢

【问题讨论】:

    标签: reactjs api-platform.com


    【解决方案1】:

    我找到了解决方案(我真是太傻了),所以我把小窍门分享给你:

    在 src/utils/dataAccess 文件中,有一个 normalize 函数:

    export function normalize(data) {
      if (has(data, 'hydra:member')) {
        // Normalize items in collections
        data['hydra:member'] = data['hydra:member'].map(item => normalize(item));
        return data;
      }
    
      // Flatten nested documents
      return mapValues(data, value =>
        Array.isArray(value)
          ? value.map(v => get(v, '@id', v))
          : get(value, '@id', value)
      );
    }
    

    似乎每次 fetch 后都会调用此函数:

    return fetch(id)
          .then(response =>
            response
              .json()
              .then(retrieved => ({ retrieved, hubURL: extractHubURL(response) }))
          )
          .then(({ retrieved, hubURL }) => {
            //retrieved = normalize(retrieved);
    
            dispatch(loading(false));
            dispatch(success(retrieved));
            ....
    

    如您所见,我只是注释了 normalize 行(在我的情况下没用)。在需要的地方执行此操作,一切都会再次正常运行!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-07
      • 2012-09-23
      • 1970-01-01
      • 2021-02-19
      相关资源
      最近更新 更多