willdurand/negotiation

PHP的内容协商工具,作为独立库提供。

3.1.0 2022-01-30 20:08 UTC

README

GitHub Actions Total Downloads Latest Stable Version

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*

AcceptAccept* 类共享一些公共方法,例如

  • 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文件。

鸣谢

许可

Negotiation采用MIT许可证发布。详情请参阅附带LICENSE文件。