remessage/client

Re Message 的 PHP 客户端

v0.8.3 2022-05-11 21:18 UTC

This package is auto-updated.

Last update: 2024-09-12 02:45:43 UTC


README

此包提供了一个面向对象的客户端层,用于与 Re Message Core 交互。包架构受到 DBAL 和 Doctrine 包的启发。

客户端在向 Core 发送消息时使用特定版本。

Package version Core version PHP Version

要求

  1. PHP 8.1+

  2. 任何兼容 psr/http-client 的包,用于发送 HTTP 请求

  3. 任何兼容 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\ClientFactoryRM\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));