willdurand / negotiation
PHP的内容协商工具,作为独立库提供。
Requires
- php: >=7.1.0
Requires (Dev)
- symfony/phpunit-bridge: ^5.0
- 3.1.0
- dev-master / 3.0.x-dev
- 3.0.0
- 3.0.0-alpha3
- 3.0.0-alpha2
- 3.0.0-alpha1
- 2.x-dev
- v2.3.1
- v2.3.0
- v2.2.1
- v2.2.0
- v2.1.0
- v2.0.3
- v2.0.2
- v2.0.1
- v2.0.0
- v2.0.0-alpha1
- 1.x-dev
- 1.5.0
- 1.4.0
- 1.3.4
- 1.3.3
- 1.3.2
- 1.3.1
- 1.3.0
- 1.2.x-dev
- 1.2.5
- 1.2.4
- 1.2.3
- 1.2.2
- 1.2.1
- 1.2.0
- 1.1.x-dev
- 1.1.2
- 1.1.1
- 1.1.0
- 1.0.x-dev
- 1.0.5
- 1.0.4
- 1.0.3
- 1.0.2
- 1.0.1
- 1.0.0
- 0.0.8
- 0.0.7
- 0.0.6
- 0.0.5
- 0.0.4
- 0.0.3
- 0.0.2
- 0.0.1
This package is auto-updated.
Last update: 2024-08-29 03:26:13 UTC
README
Negotiation 是一个不依赖任何库的独立库,允许您在应用程序中实现内容协商,无论您使用什么框架。该库基于RFC 7231。Negotiation易于使用,并且进行了广泛的单元测试!
重要:您正在浏览Negotiation 3.x+版本的文档。
版本1.x的文档可在此处获取:Negotiation 1.x 文档。
版本2.x的文档可在此处获取:Negotiation 2.x 文档。
安装
安装Negotiation的推荐方法是使用Composer
$ composer require willdurand/negotiation
使用示例
媒体类型协商
$negotiator = new \Negotiation\Negotiator(); $acceptHeader = 'text/html, application/xhtml+xml, application/xml;q=0.9, */*;q=0.8'; $priorities = array('text/html; charset=UTF-8', 'application/json', 'application/xml;q=0.5'); $mediaType = $negotiator->getBest($acceptHeader, $priorities); $value = $mediaType->getValue(); // $value == 'text/html; charset=UTF-8'
Negotiator
返回一个 Accept
实例,或者如果协商最佳媒体类型失败则返回 null
。
语言协商
<?php $negotiator = new \Negotiation\LanguageNegotiator(); $acceptLanguageHeader = 'en; q=0.1, fr; q=0.4, fu; q=0.9, de; q=0.2'; $priorities = array('de', 'fu', 'en'); $bestLanguage = $negotiator->getBest($acceptLanguageHeader, $priorities); $type = $bestLanguage->getType(); // $type == 'fu'; $quality = $bestLanguage->getQuality(); // $quality == 0.9
LanguageNegotiator
返回一个 AcceptLanguage
实例。
编码协商
<?php $negotiator = new \Negotiation\EncodingNegotiator(); $encoding = $negotiator->getBest($acceptHeader, $priorities);
EncodingNegotiator
返回一个 AcceptEncoding
实例。
字符集协商
<?php $negotiator = new \Negotiation\CharsetNegotiator(); $acceptCharsetHeader = 'ISO-8859-1, UTF-8; q=0.9'; $priorities = array('iso-8859-1;q=0.3', 'utf-8;q=0.9', 'utf-16;q=1.0'); $bestCharset = $negotiator->getBest($acceptCharsetHeader, $priorities); $type = $bestCharset->getType(); // $type == 'utf-8'; $quality = $bestCharset->getQuality(); // $quality == 0.81
CharsetNegotiator
返回一个 AcceptCharset
实例。
Accept*
类
Accept
和 Accept*
类共享一些公共方法,例如
getValue()
返回接受值(例如text/html; z=y; a=b; c=d
)getNormalizedValue()
返回参数排序后的值(例如text/html; a=b; c=d; z=y
)getQuality()
如果可用则返回质量(q
参数)getType()
返回接受类型(例如text/html
)getParameters()
返回参数集(如果提供了q
参数,则不包括q
参数)getParameter()
允许通过名称检索给定的参数。如果没有提供默认值,则回退到$default
(可以为 null)值。hasParameter()
指示是否存在参数。
版本控制
Negotiation遵循语义版本控制。
生命周期结束
1.x
截至2016年10月,1.x 分支不再受支持,这意味着主要版本 1
已达到生命周期结束。最后一个版本是:1.5.0。
2.x
截至2020年11月,2.x 分支不再受支持,这意味着主要版本 2
已达到生命周期结束。最后一个版本是:2.3.1。
稳定版本
3.x(和 dev-master
)
Negotiation 3.0 于2020年11月26日发布。这是当前的稳定版本,它与主分支(也称为 master
)同步。
单元测试
使用Composer设置测试套件
$ composer install --dev
使用PHPUnit运行
$ phpunit
贡献
请参阅CONTRIBUTING文件。
鸣谢
-
本库的部分灵感来源于
- Symfony框架;
- FOSRest;
- PEAR HTTP2.
许可
Negotiation采用MIT许可证发布。详情请参阅附带LICENSE文件。