juliangut / negotiate
协商中间件
2.1
2024-03-10 21:18 UTC
Requires
- php: ^8.0
- ext-mbstring: *
- psr/http-server-middleware: ^1.0
- willdurand/negotiation: ^3.1
Requires (Dev)
- infection/infection: ~0.25|~0.27
- juliangut/easy-coding-standard-config: ^1.15
- juliangut/phpstan-config: ^1.2
- laminas/laminas-diactoros: ^3.2
- overtrue/phplint: ^9.0
- phpcompatibility/php-compatibility: ^9.3
- phpmd/phpmd: ^2.14
- phpunit/phpunit: ^9.6.13|^10.4
- povils/phpmnd: ^3.2
- roave/security-advisories: dev-master
README
Negotiate
使用 willdurand/negotiation 的简单灵活的协商中间件
安装
Composer
composer require juliangut/negotiate
使用方法
需要 composer 自动加载文件
require './vendor/autoload.php'; use Jgut\Negotiate\Negotiator; use Jgut\Negotiate\Scope\Language; use Jgut\Negotiate\Scope\MediaType; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\RequestHandlerInterface; $scopes = [ new MediaType(['text/html', 'application/json'], 'text/html'), new Language(['en', 'es']), ]; /* @var \Psr\Http\Message\ResponseFactoryInterface $responseFactory */ $middleware = new Negotiator($scopes, $responseFactory); $middleware->setAttributeName('negotiationProvider'); // Request handler new class () implements RequestHandlerInterface { public function handle(ServerRequestInterface $request): ResponseInterface { $negotiationProvider = $request->getAttribute('negotiationProvider'); $negotiationProvider->get('Accept-Language'); // \Negotiation\Accept $negotiationProvider->getAcceptLanguage(); // \Negotiation\AcceptLanguage $negotiationProvider->getAcceptLanguageLine(); // Negotiated language string $negotiationProvider->getAcceptCharset(); // null, not defined // ... } };
作用域
将协商封装在上下文中,例如媒体类型或字符集。提供优先级列表,即可使用
可选的第二个参数控制当请求头为空或协商无法成功确定时的行为。如果设置,则将用于创建一个 \Negotiation\AcceptHeader
,否则将抛出一个 \Jgut\Negotiation\NegotiatorException
并由中间件捕获
中间件
中间件需要一个协商作用域列表。协商将在中间件中发生
- 如果一切顺利,请求将具有
- 协商结果覆盖每个作用域的头部
- 包含整个协商结果的对象的属性
\Jgut\Negotiate\Provider
- 如果协商失败
- 如果内容类型头部协商失败,将返回一个 415 响应
- 如果其他协商失败,将返回一个 406 响应
从 1.x 迁移
- 最低要求的 PHP 版本是 PHP 8.0
- 如果需要,应在每个构造函数中指定作用域的默认值
- 作用域的 negotiateRequest 现在返回修改后的请求(内部更改)
贡献
发现了一个错误或有一个功能请求?请 创建一个新问题。在创建之前先查看现有的问题。
请参阅文件 CONTRIBUTING.md
许可
有关许可条款的副本,请参阅包含在源代码中的文件 LICENSE。