ellipse / dispatcher-adr
Psr-15 中间件分发器工厂,解析 ADR 定义
Requires
- php: >=7.0
- ellipse/dispatcher: ^1.6
- ellipse/handlers-adr: ^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-25 23:17:36 UTC
README
本包为实现了 Ellipse\DispatcherFactoryInterface
的对象提供了一个工厂装饰器,来自 ellipse/dispatcher 包。它允许使用 ADR 定义 来生成 Ellipse\Dispatcher
实例。
需求 php >= 7.0
安装 composer require ellipse/dispatcher-adr
运行测试 ./vendor/bin/kahlan
创建一个解析 ADR 定义的分发器工厂
本包提供了一个实现 Ellipse\DispatcherFactoryInterface
的 Ellipse\Dispatcher\ActionResolver
类,它允许装饰任何其他实现此接口的对象。
它接受一个实现 Psr\Container\ContainerInterface
的容器作为第一个参数,以及要装饰的工厂作为第二个参数。
装饰后,生成的分发器工厂可以通过解析 ADR 定义 来生成 Ellipse\Dispatcher
实例,这些实例作为 ellipse/handlers-adr 包中的 Ellipse\Handlers\ActionRequestHandler
实例。
<?php namespace App; use SomePsr11Container; use Ellipse\DispatcherFactory; use Ellipse\Dispatcher\ActionResolver; // Get some Psr-11 container. $container = new SomePsr11Container; // Decorate a DispatcherFactoryInterface implementation with an ActionResolver. $factory = new ActionResolver($container, new DispatcherFactory);
ADR 定义
ActionRequestHandler
实例需要一个实现 Ellipse\ADR\DomainInterface
的对象容器条目 ID、一个实现 Ellipse\Handlers\ResponderInterface
的对象容器条目 ID,以及一个可选的默认输入数组。ADR 定义定义了 ActionRequestHandler
应该使用的哪个 Domain 类、Responder 类以及默认输入。它可以有两种形式
- 表示 Domain 类的完全限定名的字符串
- 包含至少一个字符串作为第一个元素的数组,该字符串表示 Domain 类的完全限定名。可选地,可以指定 Responder 类的完全限定名和默认输入数组作为第二和第三个元素
例如,SomeDomain::class
、[SomeDomain::class]
、[SomeDomain::class, SomeResponder::class]
和 [SomeDomain::class, SomeResponder::class, ['default' => 'value']]
都是有效的 ADR 定义,假设 SomeDomain
类实现了 DomainInterface
,SomeResponder
类实现了 ResponderInterface
。
当未指定 Responder 类名时(SomeDomain::class
和 [SomeDomain::class]
),用于检索 Responder 实例的容器条目 ID 默认为 Ellipse\Handlers\ResponderInterface
。这允许在未定义任何 Responder 类的情况下使用默认的 Responder 类。
ActionRequestHandler
逻辑在 ellipse/handlers-adr 文档页面上描述。
<?php namespace App; use SomePsr11Container; use Ellipse\DispatcherFactory; use Ellipse\Dispatcher\ActionResolver; // Get some Psr-11 container. $container = new SomePsr11Container; // Decorate a DispatcherFactoryInterface implementation with an ActionResolver. $factory = new ActionResolver($container, new DispatcherFactory); // Dispatchers using ADR definitions as Psr-15 request handler can now be created. $dispatcher1 = $factory(SomeDomain::class, [new SomeMiddleware]); $dispatcher2 = $factory([SomeDomain::class], [new SomeMiddleware]); $dispatcher3 = $factory([SomeDomain::class, SomeResponder::class], [new SomeMiddleware]); $dispatcher4 = $factory([SomeDomain::class, SomeResponder::class, ['default' => 'value']], [new SomeMiddleware]);