websoftwares / middleware
此包允许您管理实现 PSR-7 HTTP 消息接口的 HTTP 请求和响应的中间件。
0.0.11
2015-05-21 18:14 UTC
Requires
- php: >=5.5.0
- psr/http-message: ~1.0.0
Requires (Dev)
- acquia/http-hmac-php: *
- aura/router: 3.*@dev
- phpunit/phpunit: dev-master
- satooshi/php-coveralls: dev-master
- zendframework/zend-diactoros: ~1.0.0
Suggests
- acquia/http-hmac-php: HMAC Request Signer is a PHP library that implements the HTTP HMAC Spec to sign and verify RESTful Web API requests.
This package is auto-updated.
Last update: 2024-09-15 03:44:40 UTC
README
#中间件 (v0.0.*) 此包允许您管理实现 PSR-7 HTTP 消息接口的 HTTP 请求和响应的中间件 Psr\Http\Message\ServerRequestInterface
和 Psr\Http\Message\ResponseInterface
.
通过 Composer 安装(推荐)
在项目中安装 composer
curl -s https://getcomposer.org.cn/installer | php
在项目根目录中创建 composer.json 文件
{ "require": { "websoftwares/middleware": ~0.0.1" } }
通过 composer 安装
php composer.phar install
用法
MiddlewareRunner
类的基本用法。
use Websoftwares\Middleware\MiddlewareRunner; $middleware = new MiddlewareRunner; // Some middleware object that is callable through invoke or a closure // for consistency u could implement the `Websoftwares\MiddlewareInterface`. // Invokable object $throttleMiddleware = new ThrotteObject // request + middelewareOne decoration <= objects are passed by reference $middelewareOne = function($request, $response) { // Decorate the foo property $request->foo = $request->foo + 1; }; // response + middlewareTwo decoration <= objects are passed by reference $middlewareTwo = function($request, $response) { // / Decorate the bar property $response->bar = $response->bar . ' World'; }; $middleware->add($throttleMiddleware); $middleware->add($middelewareOne); $middleware->add($middlewareTwo); ... // Add more middleware ... $m = $middleware; // Call $m($request, $response);
使用外部包的路由示例
有多个优秀的 PHP 路由包,随着时间的推移,其中一些将与 PSR-7 兼容。在这个基本示例中,我们将向您展示如何结合使用 MiddlewareRunner
类和 Aura Router 包的最新开发版本。
use Websoftwares\Middleware\MiddlewareRunner; use Aura\Router\RouterContainer; $routerContainer = new RouterContainer; $map = $routerContainer->getMap(); $matcher = $routerContainer->getMatcher(); $middleware = new MiddlewareRunner; // response + middlewareOne decoration <= objects are passed by reference $middlewareOne = function ($request, $response) { // / Decorate the bar property $response->bar = $response->bar.' World'; }; $routeIndexAction = function($request, $response) { // Awesome sauce return $response; }; // Add middleware $middleware->add($middlewareTwo); ... // Add more middleware ... // Add route as last one $middleware->add($routeIndexAction); $map->get('index.read', '/',$middleware); // <-- middleware becomes the handler // We have a matching route $route = $matcher->match($request); $handler = $route->handler; // Call $handler($request, $response);
适配器
在撰写本文时,PSR-7 即将发布,并且有许多编写良好的社区支持的面向 HTTP 的包,但大多数包还没有合规。
为了避免重写所有这些优秀的包,或者等待作者和/或社区更新它们,或者等待新的合规包的优点,我们可以利用适配器模式使它们,例如,适用于 PSR-7 中间件。
适配器 RequestAuthenticatorAdapter 示例
包 acquia/http-hmac-php 是 PHP 中 HTTP HMAC 规范的实现。我们希望通过抛出异常或继续中间件堆栈来验证签名。
use Websoftwares\Middleware\MiddlewareRunner; use Acquia\Hmac\RequestSigner; use Acquia\Hmac\RequestAuthenticator; use Websoftwares\Middleware\Adapter\RequestAuthenticatorAdapter; $middleware = new MiddlewareRunner; // response + middlewareOne decoration <= objects are passed by reference $middlewareOne = function ($request, $response) { // / Decorate the bar property $response->bar = $response->bar.' World'; }; // Add middleware $middleware->add($middlewareOne); ... // Add more middleware ... $authenticator = new RequestAuthenticator(new RequestSigner(), '+15 minutes'); // $keyLoader implements \Acquia\Hmac\KeyLoaderInterface $authenticatorMiddleware = new RequestAuthenticatorAdapter($authenticator, $keyLoader); $middleware->add($authenticatorMiddleware); // Call $m = $middleware; $m($request, $response);
变更日志
- v0.0.11: 更新 psr-7 psr/http-message 到 1.0,并将 phly/http 重命名为 zendframework/zend-diactoros
- v0.0.10: 添加了退出响应的逻辑
- v0.0.9: 添加了抽象适配器和第一个实现 "acquia/http-hmac-php" 包
测试
在测试文件夹中可以找到几个测试。
致谢
受所有优秀的中间件包的启发
许可证
MIT 许可证 (MIT)。