incraigulous/contentful-sdk

1.0 2015-08-29 01:49 UTC

This package is auto-updated.

Last update: 2024-09-10 03:57:25 UTC


README

Latest Stable Version Total Downloads Latest Unstable Version License Daily Downloads Build Status

#已弃用。请使用Contentful官方的PHP SDK。

PHP Contentful SDK

Contentful交付和管理API的现代PHP SDK。

###这是一个与框架无关的PHP SDK。

####寻找Laravel工具包?

点击此处获取Laravel外观、基础存储库、开箱即用的缓存和缓存管理、通过命令创建webhook等功能。

Contentful初学者? Contentful是一个API驱动的CMS。请查看他们的网站API文档

##安装

通过运行以下命令安装:

composer require "incraigulous/contentful-sdk:0.0.*"

##如何使用

###内容交付API

####初始化

创建交付SDK的新实例

    use Incraigulous\ContentfulSDK\DeliverySDK;
    $deliverySDK = new DeliverySDK('TOKEN', 'SPACE_ID', $cacher);

令牌:您的Contentful API令牌。您可以使用Contentful控制面板生成此令牌。

空间ID: (可选) 实例执行的调用所使用的空间。要使用多个空间,您应使用多个SDK实例。如果您不提供空间ID,则只能使用spaces资源。

缓存器: (可选,Incraigulous\ContentfulSDK\CacherInterface实现) 一个用于处理缓存的对象。这是可选的(并且易于实现),所以不要让它让您感到害怕。请查看缓存部分以获取更多详细信息。

####空间

#####获取所有空间

$result = $deliverySDK->spaces()->get();

#####获取一个空间

$result = $deliverySDK->spaces()
				->find('SPACE_ID')
				->get();

####内容类型

#####获取内容类型

$result = $deliverySDK->contentTypes()
				->find('CONTENT_TYPE_ID')
				->get();

#####搜索内容类型

$result = $deliverySDK->contentTypes()
				->where('name', '=', 'Blog Post')
				->get();

$result = $deliverySDK->contentTypes()
				->where('name', 'ne', 'Blog Post')
				->limit(2)
				->get();

查看搜索参数了解如何搜索特定内容。

####条目

#####通过ID获取条目

$result = $deliverySDK->entries()
				->find('ENTRY ID')
				->get();

#####搜索条目

$result = $deliverySDK->entries()
				->limitByType('CONTENT TYPE ID')
				->where('fields.title', 'match', 'campus')
				->where('fields.location', 'near', '22,23')
				->limit(10)
				->get();

######在搜索结果中包括链接条目

$result = $deliverySDK
	->where('sys.id', '=', 'ENTRY ID')
	->includeLinks(3)
	->get();

includeLinks接受您想要包含的链接级别数。

####资产

#####列出所有资产

$result = $deliverySDK->assets()
            	->limit(10)
            	->get();

#####通过ID获取资产

$deliverySDK->assets()
            	->find('ASSET ID')
            	->get();

#####搜索资产

$result = $deliverySDK->assets()
              ->where('fields.file.details.size', '>=', 350000)
              ->limit(5)
              ->get();

####搜索参数

搜索很简单!只需在您的资源上调用以下方法之一。如上所示,在资产资源上使用where()和limit()是一个很好的搜索示例。

#####Where筛选运算符

有关搜索的更详细文档,请参阅Contentful的API文档

#####缓存

我建议您缓存所有内容交付API GET请求的结果(即Memcached或Redis)。如果您正在处理流量较低的网站,您可能不需要缓存,但无论如何都会大大提高性能。

一种方法是将所有API GET调用包裹在缓存检查中,但这可能导致代码重复。幸运的是,还有更好的方法。

我已经包含了一个缓存器接口。不用担心,它只需要四个方法。只需创建一个实现了 Incraigulous\ContentfulSDK\CacherInterface 的类,并在实例化 SDK 时将其作为第三个参数传递。SDK 会处理其余部分。每个 GET 请求都将使用您的缓存器类生成的唯一键进行缓存。

	$cacher = new CustomCacher(); 
    $deliverySDK = new DeliverySDK('SPACE_ID', 'TOKEN', $cacher);

这里是一个使用 Laravel 缓存辅助器的示例

如果为 Redis 或 Memcached 构建了一个通用的 PHP 缓存器实现,请提交一个拉取请求。我很乐意将其包含在存储库中。

###管理 API

####初始化

创建管理 SDK 的新实例

    use Incraigulous\ContentfulSDK\ManagementSDK;
    $managementSDK = new ManagementSDK('TOKEN', 'SPACE_ID');

令牌:您的 Contentful OAuth 令牌。

空间ID: (可选) 实例执行的调用所使用的空间。要使用多个空间,您应使用多个SDK实例。如果您不提供空间ID,则只能使用spaces资源。

请注意,还有一个用于缓存器的第三个参数。管理 API 调用目前不会缓存,以确保 GET 请求是最新的,从而避免在更新记录时发生冲突。我仍然想提供一个地方来提供缓存器,以防我决定用它来做什么。您可以选择忽略它,或者为了保险起见提供缓存器。

####使用构建器对象 Contentful 负载数据可以很复杂,尤其是在处理 entriesassets 时。构建器类就在这里帮助!它们是可选的帮助类,可以帮助构建负载数据。它们会为您构建负载数组,并在构建过程中通知您有哪些选项。如果您使用的 IDE 有提示功能,它们会非常有帮助。

如果您不想使用它们,就不要使用它们。SDK 会解析负载数据,查找构建器对象,并将它们转换为数组,然后再将请求传递给 Contentful。因此,您可以使用标准数组或由构建器对象组成的数组。

以下示例将假设您正在使用所需的构建器

use Incraigulous\ContentfulSDK\PayloadBuilders\Entry;
use Incraigulous\ContentfulSDK\PayloadBuilders\EntryField;
use Incraigulous\ContentfulSDK\PayloadBuilders\Space;
...

####空间

#####创建空间

$result = $managementSDK->spaces()
				->post(
					new Space('My Space')
				);

#####更新空间

$space = $managementSDK->spaces()
             ->find('SPACE_ID')
             ->get();
             
$space['name'] = 'Outer Space';
$result = $managementSDK->spaces()->put('SPACE_ID', $space);

#####删除空间

$result = $managementSDK->spaces()->delete('SPACE_ID');

####内容类型

#####创建内容类型

$result = $managementSDK->contentTypes()
                ->post(
                    new ContentType('Blog Post', 'title', [
                        new ContentTypeField('title', 'Title', 'Text'),
                        new ContentTypeField('body', 'Body', 'Text'),
                    ])
                );
            );

#####创建带有验证和链接的内容类型

$result = $managementSDK->contentTypes()
                ->post(
                    new ContentType('Blog Post', 'title', [
                        new ContentTypeField('title', 'Title', 'Text'),
                        new ContentTypeField('body', 'Body', 'Text'),
                        (new ContentTypeField('author', 'Field List', 'Link'))->setLink('Entry'),
                        (new ContentTypeField('sidebar', 'Field List', 'Array'))->setMultiLink('Entry'),
                        (new ContentTypeField('category', 'Category', 'Text'))->setValidations((new ContentTypeValidation())->in(['Design', 'Development'])),
                    ])
                );

#####更新内容类型

$contentType = $managementSDK->contentTypes()
					->find('CONTENT_TYPE_ID')
					->get();

$contentType['fields'][0]['name'] = 'Post Title';
$result = $managementSDK->contentTypes()->put('CONTENT_TYPE_ID', $contentType);

#####发布内容类型

$contentType = $managementSDK->contentTypes()
					->find('CONTENT_TYPE_ID')
					->get();

$result = $managementSDK->contentTypes()->publish('CONTENT_TYPE_ID', $contentType);

#####取消发布内容类型

$contentType = $managementSDK->contentTypes()
					->find('CONTENT_TYPE_ID')
					->get();

$result = $managementSDK->contentTypes()->unpublish('CONTENT_TYPE_ID', $contentType);

#####删除内容类型

$result = $managementSDK->contentTypes()->delete('CONTENT_TYPE_ID');

#####内容类型负载数据构建器

#####内容类型字段负载数据构建器

#####内容类型字段验证负载数据构建器

不传递任何参数。

####条目

#####创建条目

$result = $managementSDK->entries()->contentType('CONTENT_TYPE_ID')->post(
            new Entry([
                    new EntryField('title', 'Hello, World!'), //Create a field with only the default language
                    (new EntryField('body'))->addLanguage('en-US', 'Bacon is healthy!') //Add a language to a field.
                ])
        );

请注意,您可以在不指定语言的情况下向字段添加内容。默认默认语言是 en-US。要指定不同的默认语言,请定义一个 CONTENTFUL_DEFAULT_LANGUAGE 常量。

示例

define('CONTENTFUL_DEFAULT_LANGUAGE', 'de-DE'); 

#####指定 ID 创建条目

$result = $managementSDK->entries()->put('MY_CUSTOM_ID', 
		new Entry([
                    new EntryField('title', 'Hello, World!'),
                    (new EntryField('body'))->addLanguage('en-US', 'Bacon is healthy!')
                ])
        );

#####创建带有链接字段的条目

$result = $managementSDK->entries()->contentType('CONTENT_TYPE_ID')->post(new Entry([
            new EntryField('title', 'Hello, World!'),
           (new EntryField('body'))->addLanguage('en-US', 'Bacon is healthy!'),
           (new EntryField('sidebar'))->addMultiLink('ENTRY_ID', 'Entry')->addMultiLink('ENTRY_ID', 'Entry'),
           (new EntryField('author'))->addLink('ENTRY_ID', 'Entry')
        ]));

#####更新条目

$entry = $managementSDK->entries()
					->find('ENTRY_ID')
					->get();

$entry['fields']['title'] = new EntryField('title', 'Cheese is Healthy!');
$result = $managementSDK->entries()->put('ENTRY_ID', $entry);

#####发布条目

$entry = $managementSDK->entries()->find('ENTRY_ID')->get();
$result = $managementSDK->entries()->publish('ENTRY_ID', $entry);

#####取消发布条目

$entry = $managementSDK->entries()->find('ENTRY_ID')->get();
$result = $managementSDK->entries()->unpublish('ENTRY_ID', $entry);

#####存档条目

$result = $managementSDK->entries()->archive('ENTRY_ID');

#####取消存档条目

$result = $managementSDK->entries()->unarchive('ENTRY_ID');

#####删除条目

$result = $managementSDK->entries()->delete('ENTRY_ID');

#####条目负载数据构建器

#####条目字段负载数据构建器

####资产

#####创建资产

$result = $managementSDK->assets()->post(new Asset([
                    new AssetField('title', 'Bacon Pancakes'),
                    new File("image/jpeg", "example.jpg", "https://example.com/example.jpg")
                ])
        );

#####指定 ID 创建资产

$result = $managementSDK->assets()->put('MY_CUSTOM_ID', new Asset([
                    new AssetField('title', 'Bacon Pancakes'),
                    new File("image/jpeg", "example.jpg", "https://example.com/example.jpg")
                ])
        );

#####更新资产

$asset = $managementSDK->assets()->find('ASSET_ID')->get();

$asset['fields']['file'] = new File("image/jpeg", "example.jpg", "https://example.com/example.jpg");
$result = $managementSDK->assets()->put('ASSET_ID', $asset);

#####处理资产

$result = $managementSDK->assets()->process('ASSET_ID');

#####发布资产

$asset = $managementSDK->assets()->find('ASSET_ID')->get();
$result = $managementSDK->assets()->publish('ASSET_ID', $asset);

#####取消发布资产

$asset = $managementSDK->assets()->find('ASSET_ID')->get();
$result = $managementSDK->assets()->unpublish('ASSET_ID', $asset);

#####存档资产

$result = $managementSDK->assets()->archive('ASSET_ID');

#####取消存档资产

$result = $managementSDK->assets()->unarchive('ASSET_ID');

#####删除资产

$result = $managementSDK->assets()->delete('ASSET_ID');

#####资产负载数据构建器

#####资产字段负载数据构建器

#####文件负载数据构建器

####Webhooks

#####创建 Webhook

$result = $managementSDK->webhooks()->post(
			new Webhook('http://www.example.com/')
		);

#####更新 Webhook 或创建带有指定 ID 的新 Webhook

$result = $managementSDK->webhooks()->put('WEBHOOK_ID', 
			new Webhook('http://www.example.com/')
		);

#####删除 Webhook

$result = $managementSDK->webhooks()->delete('WEBHOOK_ID');

#####Webhook 负载数据构建器

###未实现的功能?

###贡献

看到错别字或错误? 提交拉取请求。
有什么新功能? 提交拉取请求。
想要新功能却不知道如何实现? 你可以随时提出,如果我认为这是一个不错的想法,我可能会接受。

####你如何帮助我将会为我想实施的功能创建问题。如果我有计划亲自构建它们,我会给自己分配任务。如果它们没有被分配,请主动承担起来!