ellipse / middleware-container
Psr-15 中间件代理 Psr-11 容器条目
1.0.3
2018-03-19 16:08 UTC
Requires
- php: >=7.0
- ellipse/type-errors: ^1.0
- psr/container: ^1.0
- psr/http-message: ^1.0
- psr/http-server-handler: ^1.0
- psr/http-server-middleware: ^1.0
Requires (Dev)
- eloquent/phony-kahlan: ^1.0
- kahlan/kahlan: ^4.0
This package is auto-updated.
Last update: 2024-08-26 00:37:20 UTC
README
此包提供了一个 Psr-15 中间件,用于代理一个 Psr-11 容器条目。
要求 php >= 7.0
安装 composer require ellipse/middleware-container
运行测试 ./vendor/bin/kahlan
使用容器条目作为中间件
类 Ellipse\Middleware\ContainerMiddleware
接受一个实现了 Psr\Container\ContainerInterface
的实现和一个容器 ID 作为参数。它的 ->process()
方法通过此 ID 从容器中检索中间件并代理其 ->process()
方法。
当容器条目需要在请求处理时解析时,这非常有用。
当从容器中检索的值不是一个实现了 Psr\Http\Server\MiddlewareInterface
的对象时,将抛出 Ellipse\Middleware\Exceptions\ContainedMiddlewareTypeException
。
<?php namespace App; use SomePsr11Container; use Ellipse\Middleware\ContainerMiddleware; // Get some Psr-11 container. $container = new SomePsr11Container; // Add a middleware in the container. $container->set('some.middleware', function () { return new SomeMiddleware; }); // Create a container middleware with the Psr-11 container and the entry id. $middleware = new ContainerMiddleware($container, 'some.middleware'); // The middleware ->process() method retrieve the middleware from the container and proxy it. $response = $middleware->process($request, new SomeRequestHandler);
使用自动装配的示例
在容器中注册每个中间件类可能很麻烦。以下是使用来自 ellipse/container-reflection 包的 Ellipse\Container\ReflectionContainer
类自动装配中间件实例的方法。
<?php namespace App; use Psr\Http\Server\MiddlewareInterface; use SomePsr11Container; use Ellipse\Container\ReflectionContainer; use Ellipse\Middleware\ContainerMiddleware; // Get some Psr-11 container. $container = new SomePsr11Container; // Decorate the container with a reflection container. // Specify the middleware implementations can be auto wired. $reflection = new ReflectionContainer($container, [ MiddlewareInterface::class, ]); // Create a container middleware with the reflection container and a middleware class name. $middleware = new ContainerMiddleware($reflection, SomeMiddleware::class); // An instance of SomeMiddleware is built and its ->process() method is proxied. $response = $middleware->process($request, new SomeRequestHandler);