jasny/dummy-middleware

PSR-7 请求的模拟客户端和服务器中间件

v1.0.0 2019-03-13 00:08 UTC

This package is auto-updated.

Last update: 2024-08-24 15:44:45 UTC


README

Build Status Scrutinizer Code Quality Code Coverage Packagist Stable Version Packagist License

PSR-7 请求的模拟客户端和服务器中间件。可以作为 PSR-15 和双向传递中间件使用。

模拟服务作为 空对象 / 透传使用,防止使用 if 语句。

安装

composer require jasny/dummy-middleware

用法

服务器中间件

服务器中间件可用于所有 PSR-7 服务器请求的透传。

单次传递中间件(PSR-15)

中间件实现了 PSR-15 的 MiddlewareInterface。由于 PSR 标准被许多新库支持,例如 Zend Stratigility

use Jasny\Dummy\ServerMiddleware;
use Zend\Stratigility\MiddlewarePipe;
use Zend\Diactoros\ResponseFactory;

$middleware = new ServerMiddleware();

$app = new MiddlewarePipe();
$app->pipe($middleware);

双向传递中间件

许多 PHP 库支持双向传递中间件。这些是具有以下签名的可调用对象;

fn(ServerRequestInterface $request, ResponseInterface $response, callable $next): ResponseInterface

要获取用于 Jasny RouterRelay 的回调,请使用 asDoublePass() 方法。

use Jasny\Dummy\ServerMiddleware;
use Relay\RelayBuilder;

$middleware = new ServerMiddleware();

$relayBuilder = new RelayBuilder($resolver);
$relay = $relayBuilder->newInstance([
    $middleware->asDoublePass(),
]);

$response = $relay($request, $baseResponse);

客户端中间件

客户端中间件可用于支持 PSR-7 的 HTTP 客户端,如 GuzzleHTTPlug

双向传递中间件

客户端中间件可用于任何支持双向传递中间件的客户端。此类中间件是具有以下签名的可调用对象;

fn(RequestInterface $request, ResponseInterface $response, callable $next): ResponseInterface

大多数 HTTP 客户端不支持双向传递中间件,而是支持单次传递。但是,像 Relay 这样的更通用目的 PSR-7 中间件库支持双向传递。

use Relay\RelayBuilder;
use Jasny\Dummy\ClientMiddleware;

$middleware = new ClientMiddleware();

$relayBuilder = new RelayBuilder($resolver);
$relay = $relayBuilder->newInstance([
    $middleware->asDoublePass(),
]);

$response = $relay($request, $baseResponse);

客户端中间件不符合 PSR-15(单次传递),因为它是为服务器请求而设计的。

Guzzle

Guzzle 是最受欢迎的 PHP HTTP 客户端。中间件有一个 forGuzzle() 方法,该方法创建一个回调,该回调可以用作 Guzzle 中间件。

use GuzzleHttp\HandlerStack;
use GuzzleHttp\Client;
use Jasny\Dummy\ClientMiddleware;

$middleware = new ClientMiddleware();

$stack = new HandlerStack();
$stack->push($middleware->forGuzzle());

$client = new Client(['handler' => $stack]);

HTTPlug

HTTPlug 是 PHP-HTTP 的 HTTP 客户端。它允许你编写可重用的库和应用程序,这些库和应用程序需要 HTTP 客户端而不绑定到特定实现。

中间件的 forHttplug() 方法创建一个对象,该对象可以用作 HTTPlug 插件。

use Http\Discovery\HttpClientDiscovery;
use Http\Client\Common\PluginClient;
use Jasny\Dummy\ClientMiddleware;

$middleware = new ClientMiddleware();

$pluginClient = new PluginClient(
    HttpClientDiscovery::find(),
    [
        $middleware->forHttplug(),
    ]
);