remessage / client
Re Message 的 PHP 客户端
Requires
- php: >=8.1
- ext-mbstring: *
- doctrine/annotations: ^1.10
- doctrine/collections: ^1.6
- psr/event-dispatcher: ^1.0
- psr/http-client: ^1.0
- psr/http-factory: ^1.0
- psr/http-message: ^1.0
- psr/log: ^3.0
- remessage/message: ^2.2.0
- symfony/config: ^6.0
- symfony/yaml: ^6.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.5
- nyholm/psr7: ^1.2
- phpunit/phpunit: ^9.5
- symfony/event-dispatcher: ^6.0
- symfony/http-client: ^6.0
README
此包提供了一个面向对象的客户端层,用于与 Re Message Core 交互。包架构受到 DBAL 和 Doctrine 包的启发。
客户端在向 Core 发送消息时使用特定版本。
要求
-
PHP 8.1+
-
任何兼容
psr/http-client
的包,用于发送 HTTP 请求 -
任何兼容
psr/event-dispatcher
的包包中包含
symfony/event-dispatcher
的配置器
安装
您需要 Composer 来安装
composer require remessage/client
使用方法
要创建客户端实例,您需要选择传输。目前仅提供 HTTP 协议传输。此传输可以与 PSR 7、PSR 17、PSR 18 实现(例如 symfony/http-client
)一起工作。在接下来的示例中,我们将使用此包作为 http 客户端。
任何传输都需要来自 remessage/message
包的消息序列化器。您可以使用 RM\Standard\Message\Serializer\ChainMessageSerializer
类传递每个消息类型的序列化器。
在创建传输实例后,您可以使用 RM\Component\Client\ClientFactory
或 RM\Component\Client\ClientConfigurator
创建客户端实例。我们建议使用配置器,因为它具有简单的设置。工厂具有多个设置器,提供客户端定制。
无论如何,您都需要配置以下属性
- 传输(在构造函数和
create()
方法中必需)
您还可以通过工厂配置以下属性
- 水化器,从响应创建实体对象
- 存储库注册表,包含通过工厂创建的存储库
- 存储库工厂,创建存储库
- 认证器工厂,创建认证器
- 授权存储,存储授权数据,如令牌
- 授权解析器,查找与请求一起传递到核心的凭证
- 配置加载器,从带有授权解析器设置的资源加载操作配置
使用 HTTP 传输创建客户端的示例
use RM\Component\Client\ClientFactory; use RM\Component\Client\Transport\HttpTransport; use RM\Standard\Message\Serializer\ActionSerializer; use RM\Standard\Message\Serializer\ChainMessageSerializer; use RM\Standard\Message\Serializer\ErrorSerializer; use RM\Standard\Message\Serializer\ResponseSerializer; use Symfony\Component\HttpClient\Psr18Client; $http = new Psr18Client(); $serializer = new ChainMessageSerializer(); $serializer->pushSerializer(new ActionSerializer()); $serializer->pushSerializer(new ErrorSerializer()); $serializer->pushSerializer(new ResponseSerializer()); $transport = new HttpTransport($http, $http, $http, $serializer); $client = ClientFactory::create($transport)->build();
事件
该包提供一些事件,允许您交互并处理某些情况。例如,我们提供了一些事件监听器。
事件
- RM\Component\Client\Event\ErrorEvent
- RM\Component\Client\Event\SentEvent
- RM\Component\Client\Event\HydratedEvent
事件监听器
- RM\Component\Client\EventListener\ThrowableSendListener - 在错误消息上抛出异常并创建错误事件
- RM\Component\Client\EventListener\LazyLoadListener - 提供实体关系的延迟加载
如何添加事件监听器(对于 Symfony EventDispatcher)
use RM\Component\Client\ClientFactory; use RM\Component\Client\Event\SentEvent; use RM\Component\Client\EventListener\ThrowableSendListener; use RM\Component\Client\Transport\TransportInterface; use Symfony\Component\EventDispatcher\EventDispatcher; // transport initialization /** @var TransportInterface $transport **/ $factory = ClientFactory::create($transport); $client = $factory->build(); /** @var EventDispatcher $eventDispatcher */ $eventDispatcher = $factory->getEventDispatcher(); $eventDispatcher->addListener(SentEvent::class, new ThrowableSendListener($eventDispatcher));
我们建议注册包提供的所有事件监听器。
此外,您可以在构建之前覆盖事件分发器
use RM\Component\Client\ClientFactory; use RM\Component\Client\Event\SentEvent; use RM\Component\Client\EventListener\ThrowableSendListener; use RM\Component\Client\Transport\TransportInterface; use Symfony\Component\EventDispatcher\EventDispatcher; // transport initialization $eventDispatcher = new EventDispatcher(); /** @var TransportInterface $transport **/ $client = ClientFactory::create($transport) ->setEventDispatcher($eventDispatcher) ->build() ; $eventDispatcher->addListener(SentEvent::class, new ThrowableSendListener($eventDispatcher));