php Contentful -创建新创建的条目并相互引用

z31licg0  于 2023-01-16  发布在  PHP
关注(0)|答案(1)|浏览(109)

我正在使用Contentful API PHP SDK library,并通过此API创建几个不同的 * 条目 *,这些条目将相互引用。
我可以创建不同的条目,可以编辑其中的文本字段,无论是在创建时还是创建后,我都可以编辑字段。但是,我不能做的是将条目相互引用。
就本期而言,这两种内容类型是:ContentType-AContentType-B,其中References字段可以保存0个或多个引用(称为Components)。
使用的代码如下所示:

// environmentProxy handles create/update
$environment = $this->client->getEnvironmentProxy($spaceId, $environmentId);

// creating ContentType-A Entry
$entry = new Entry('ContentType-A');
$entry->setField('title', 'en-US' , $title);
$environment->create($entry);

// test out if I can edit the previously created entry
// call newly created entry just in case their API is cached
$newlyCreatedEntryA = $environment->getEntry($entry->getId());
$newlyCreatedEntryA->setField('title' , 'en-US' , 'Some new title');
$newlyCreatedEntryA->update();  // I can verify that the entry title changed

// create ContentType-B Entry
$entry = new Entry('ContentType-B');
$entry->setField('title', 'en-US' , 'Content Type B - ' . $title);
$environment->create($entry);
$newlyCreatedEntryB = $environment->getEntry($entry->getId());

// try to reference ContentType-B into Components field in ContentType-A
// THIS IS WHERE I GET AN ERROR
$newlyCreatedEntryA->setField('Components', 'en-US', $newlyCreatedEntryB);
$newlyCreatedEntryA->update();

我收到了一个422错误。我已经用上面标注的变量替换了值,以确保值被正确放置。

Client error: `PUT https://api.contentful.com/spaces/{$spaceId}/environments/{$environmentId}/entries/{$newlyCreatedEntryA->getId()}` resulted in a `422 Unprocessable Entity` response:
{
   {
    "Error",
    "id": "InvalidEntry"
  },
  "message": "Validation error",

其他检查,以了解它可能无法工作的原因:
1.认为这是一个缓存问题,所以在脚本的各个部分放入sleep(5)以延迟并允许Contentful的系统得到更新。
1.在应用程序本身中验证新创建的内容是否存在

  1. SDK库本身中的输出值,并且我看到正在传递的对象
    1.尝试手动发布两个条目并通过代码链接它们
nc1teljy

nc1teljy1#

显然,我尝试访问的端点当前不受支持。
相反,我遇到了this article,它引导我查看PATCH而不是PUT,我可以使用Curl添加条目。
上述文章中的相关有用说明/代码:

{ 
    [
        {
            "op": "add",
            "path": "/fields/{fieldName}",
            "value": {
                "en-US": [
                    {
                        "sys": {
                            "type": "Link",
                            "linkType": "Entry",
                            "id": "37e9c2f9ef994cb5"
                        }
                    }
                ]
            }
        }
    ]
}

您需要记住的一件新事情是-如果您正在使用curl,则必须跟踪正在更新的版本,否则可能会出现版本不匹配错误。

相关问题