dreadlabs / media-type-encoding
媒体类型指定的简单API。
1.0
2018-07-16 21:22 UTC
Requires (Dev)
- behat/behat: ~3.4.3@stable
- phpunit/phpcov: ~4.0.5@stable
- phpunit/phpunit: ~6.5.8@stable
- sami/sami: ~4.0.16@stable
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 context的SalesApi
命名。在那里,您有一个名为UserCreated
的Domain 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