jasny / dummy-middleware
PSR-7 请求的模拟客户端和服务器中间件
Requires
- php: >=7.2.0
- psr/http-message: ^1.0
- psr/http-server-middleware: ^1.0
Requires (Dev)
- guzzlehttp/guzzle: ^6.3
- jasny/php-code-quality: ^2.3
- php-http/client-common: ^2.0
- php-http/mock-client: ^1.3
This package is auto-updated.
Last update: 2024-08-24 15:44:45 UTC
README
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 Router 和 Relay 的回调,请使用 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 客户端,如 Guzzle 和 HTTPlug。
双向传递中间件
客户端中间件可用于任何支持双向传递中间件的客户端。此类中间件是具有以下签名的可调用对象;
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(), ] );