superbalist / laravel-event-pubsub
Laravel 的基于 pub/sub 的事件协议和实现
Requires
- php: >=5.6.0
- illuminate/events: ^5.3
- illuminate/support: ^5.3
- superbalist/laravel-pubsub: ^2.0|^3.0
- superbalist/php-event-pubsub: ^4.0
Requires (Dev)
- mockery/mockery: ^0.9.5
- phpunit/phpunit: ^5.5
This package is auto-updated.
Last update: 2024-08-04 17:49:31 UTC
README
Laravel 的基于 pub/sub 的事件协议和实现。
此包是一个桥接器,将 php-event-pubsub 包装到 Laravel 中。它基于现有的 laravel-pubsub 包,增加了通过 pub/sub 发布和订阅事件的支持。
如果你不熟悉 laravel-pubsub
包,建议首先查看他们的 文档。
为了支持 Laravel 4,请使用包 https://github.com/Superbalist/laravel4-event-pubsub
安装
composer require superbalist/laravel-event-pubsub
该包有一个默认配置,使用以下环境变量。
PUBSUB_EVENTS_CONNECTION=null
PUBSUB_EVENTS_TRANSLATOR=pubsub.events.translators.simple
PUBSUB_EVENTS_VALIDATOR=null
PUBSUB_EVENTS_THROW_VALIDATION_EXCEPTIONS_ON_DISPATCH=true
如果 PUBSUB_EVENTS_CONNECTION
环境变量或 pubsub_events.default
配置值留空,则默认连接将从 laravel-pubsub
包配置中获取。
在 app.php 中注册服务提供者
'providers' => [ // ... Superbalist\LaravelEventPubSub\PubSubEventsServiceProvider::class, ]
在 app.php 中注册外观
'aliases' => [ // ... 'PubSubEvents' => Superbalist\LaravelEventPubSub\PubSubEventsFacade::class, ]
要自定义配置文件,请使用 Artisan 发布包配置。
php artisan vendor:publish --provider="Superbalist\LaravelEventPubSub\PubSubEventsServiceProvider"
然后您可以在 app/config/pubsub_events.php
中编辑生成的配置。
使用方法
简单事件
SimpleEvent
是一个接受名称和可选属性的事件的简单事件。
// the pubsub_events.translator config setting should be set to 'pubsub.events.translators.simple' // get the event manager $manager = app('pubsub.events'); // dispatch an event $event = new \Superbalist\EventPubSub\Events\SimpleEvent( 'user.created', [ 'user' => [ 'id' => 1456, 'first_name' => 'Joe', 'last_name' => 'Soap', 'email' => 'joe.soap@example.org', ], ] ); $manager->dispatch('events', $event); // dispatch multiple events $events = [ new \Superbalist\EventPubSub\Events\SimpleEvent( 'user.created', [ 'user' => [ // ... ], ] ), new \Superbalist\EventPubSub\Events\SimpleEvent( 'user.created', [ 'user' => [ // ... ], ] ), ]; $manager->dispatchBatch('events', $events); // listen for an event $manager->listen('events', 'user.created', function (\Superbalist\EventPubSub\EventInterface $event) { var_dump($event->getName()); var_dump($event->getAttribute('user')); }); // listen for all events on the channel $manager->listen('events', '*', function (\Superbalist\EventPubSub\EventInterface $event) { var_dump($event->getName()); }); // all the aboce commands can also be done using the facade PubSubEvents::dispatch('events', $event);
主题事件
TopicEvent
是一个接受主题、名称、版本和可选属性的事件的简单事件。
// the pubsub_events.translator config setting should be set to 'pubsub.events.translators.topic' // get the event manager $manager = app('pubsub.events'); // dispatch an event $event = new \Superbalist\EventPubSub\Events\TopicEvent( 'user', 'created', '1.0', [ 'user' => [ 'id' => 1456, 'first_name' => 'Joe', 'last_name' => 'Soap', 'email' => 'joe.soap@example.org', ], ] ); $manager->dispatch('events', $event); // listen for an event on a topic $manager->listen('events', 'user/created', function (\Superbalist\EventPubSub\EventInterface $event) { // ... }); // listen for an event on a topic matching the given version $manager->listen('events', 'user/created/1.0', function (\Superbalist\EventPubSub\EventInterface $event) { // ... }); // listen for all events on a topic $manager->listen('events', 'user/*', function (\Superbalist\EventPubSub\EventInterface $event) { // ... }); // listen for all events on the channel $manager->listen('events', '*', function (\Superbalist\EventPubSub\EventInterface $event) { // ... });
模式事件
SchemaEvent
是 TopicEvent
的扩展,并接受模式和可选属性。主题、名称和版本是从模式中派生出来的。
模式必须采用以下格式 (协议)://(......)?/events/(主题)/(通道)/(版本).json
// the pubsub_events.translator config setting should be set to 'pubsub.events.translators.schema' // the pubsub_events.validator config setting can be set to 'pubsub.events.validators.json_schema' to take advantage of // JSON Schema validation on incoming events // get the event manager $manager = app('pubsub.events'); // dispatch an event $event = new \Superbalist\EventPubSub\Events\SchemaEvent( 'http://schemas.my-website.org/events/user/created/1.0.json', [ 'user' => [ 'id' => 1456, 'first_name' => 'Joe', 'last_name' => 'Soap', 'email' => 'joe.soap@example.org', ], ] ); $manager->dispatch('events', $event); // the listen expressions are the same as those used for TopicEvents.
错误处理
该库支持在事件转换失败、监听表达式失败和验证失败时使用错误处理器。
这些可以在 translate_fail_handler、listen_expr_fail_handler 和 validation_fail_handler 配置选项中配置为可调用的。
该配置包含默认的可调用的,这些将回调转换为 Laravel 事件。
您可以在 EventServiceProvider 中注册以下事件的监听器
\Superbalist\LaravelEventPubSub\Events\TranslationFailureEvent(
$message
)
\Superbalist\LaravelEventPubSub\Events\ListenExprFailureEvent(
\Superbalist\EventPubSub\EventInterface $event,
$expr
)
\Superbalist\LaravelEventPubSub\Events\ValidationFailureEvent(
\Superbalist\EventPubSub\ValidationResult $result
)