dreadlabs/media-type-encoding

媒体类型指定的简单API。

1.0 2018-07-16 21:22 UTC

This package is auto-updated.

Last update: 2024-09-23 22:54:34 UTC


README

描述

此库提供了一种简单的API用于媒体类型指定。

它可以用来从字符串字面量(如PHP类名)生成媒体类型字符串。这对于需要表示平台无关类型字面的API或序列化过程非常有用。

此库依赖于RFC 6838规范。

它是DreadLabs/media-type-decoding的配套工具,提供媒体类型字符串字面的编码。

安装

composer install dreadlabs/media-type-encoding:~1.0

用法

示例1

从一个完全限定、命名空间化的PHP类名,在application/顶级类型中指定媒体类型。子类型位于Personal树中。PHP类的命名惯例(UpperCamelCased)应指定为连字符形式。指定的媒体类型包含一个版本参数和一个+json后缀。

$mediaType = new Application(RegistrationTree::personal(new HyphenedFromUpperCamelCased(new Exploded('\\'))));
$withParameter = $mediaType->withParameter(new Parameter('version', '1.0'));
$withSuffix = $withParameter->withSuffix(new Json());

echo (string)$withSuffix->designated('Acme\\Example\\Class');

> 'application/prs.acme.example.class+json; version=1.0'

示例2

此示例增强了示例1。让我们假设您正以这种方式构建您的PHP项目,即Domain命名空间包含您的业务逻辑。您正在构建的PHP库以一个名为Bounded contextSalesApi命名。在那里,您有一个名为UserCreatedDomain Event。媒体类型编码不应包含太多关于vendor命名空间和文件系统的物理结构的信息。

$imaginaryClassName = 'Acme\\SalesApi\\Domain\\Event\\UserCreated';
$namespace = 'Acme\\SalesApi\\Domain\\Event';
$mediaType = new Application(RegistrationTree::vendor(new HyphenedFromUpperCamelCased(new Exploded('\\'))));

$designatedMediaType = $mediaType->designated(str_replace($namespace, 'SalesApi', $imaginaryClassName));

self::assertEquals('application/vnd.sales-api.user-created', (string)$designatedMediaType);

我向您展示这个示例的原因是,因为我考虑实现一个名为Prefixed的子类型,它允许替换FQCN的部分。但这会添加不必要的复杂性,因为简单的str_replace就足够了。

开发

要求

请阅读贡献指南,并确保您有一个可工作的Docker环境。

设置

按照贡献指南中的说明进行Fork和克隆此存储库。

打开终端并运行设置脚本

script/setup

运行测试

script/console run composer test:unit
script/console run composer test:integration
script/console run composer test:acceptance:fail-fast

链接

许可证

MIT