rabbitevents / publisher
RabbitEvents 包的 Publisher 组件。
Requires
- php: ^8.1
- ext-json: *
- rabbitevents/foundation: v8.2.1
This package is auto-updated.
Last update: 2024-09-03 11:24:45 UTC
README
RabbitEvents Publisher 组件提供了一个 API,用于在整个应用程序结构中发布事件。更多详细信息请参阅 Nuwber 的 RabbitEvents 文档。
RabbitEvents Publisher 是通知所有其他微服务支付成功的部分。
目录
通过 Composer 安装
RabbitEvents Publisher 可以通过 Composer 包管理器安装
composer require rabbitevents/publisher
安装 Publisher 后,您可以执行 rabbitevents:install
Artisan 命令,该命令将 RabbitEvents 配置文件安装到您的应用程序中
php artisan rabbitevents:install
配置
有关配置的详细信息请参阅库 文档。
发布
使用事件类
以下是一个示例事件类
<?php use App\Payment; use App\User; use RabbitEvents\Publisher\ShouldPublish; use RabbitEvents\Publisher\Support\Publishable; class PaymentSucceededRabbitEvent implements ShouldPublish { use Publishable; public function __construct(private User $user, private Payment $payment) { } public function publishEventKey(): string { return 'payment.succeeded'; } public function toPublish(): mixed { return [ 'user' => $this->user->toArray(), 'payment' => $this->payment->toArray(), ]; } }
事件类的要求是实现 \RabbitEvents\Publisher\ShouldPublish
接口。
作为替代,您也可以扩展 \RabbitEvents\Publisher\Support\AbstractPublishableEvent
。这个类是为了简化事件类的创建而创建的。
要 发布 此事件,您只需调用事件类的 publish
方法并传递所有必要的数据
<?php $payment = new Payment(...); // ... PaymentSucceededRabbitEvent::publish($request->user(), $payment);
publish
方法由 Publishable
特性提供。
使用 publish
函数
有时,使用带有事件键和负载的辅助函数 publish
更容易
<?php publish( 'payment.succeeded', [ 'user' => $request->user()->toArray(), 'payment' => $payment->toArray(), ] );
使用 publish
函数发布事件对象
您也可以结合使用上述两种方法
<?php $event = new PaymentSucceededEvent($request->user(), $payment); event($event) publish($event);
测试
我们总是编写测试。我们应用程序中的测试包含许多模拟和伪装来测试事件是如何发布的。
有 PublishableEventTesting
特性,它为想要测试的事件类提供断言方法。
Event.php
<?php namespace App\BroadcastEvents; use Nuwber\Events\Event\Publishable; use Nuwber\Events\Event\ShouldPublish; use Nuwber\Events\Event\Testing\PublishableEventTesting; class Event implements ShouldPublish { use Publishable; use PublishableEventTesting; public function __construct(private array $payload) { } public function publishEventKey(): string { return 'something.happened'; } public function toPublish(): array { return $this->payload; } }
Test.php
<?php use \App\RabbitEvents\Event; use \App\RabbitEvents\AnotherEvent; Event::fake(); $payload = [ 'key1' => 'value1', 'key2' => 'value2', ]; Event::publish($payload); Event::assertPublished('something.happened', $payload); AnotherEvent::assertNotPublished();
如果断言未通过,将抛出 Mockery\Exception\InvalidCountException
。
不要忘记在 tearDown
或类似测试方法的测试中调用 \Mockery::close()
。