superbalist / laravel4-event-pubsub
为 Laravel 4 设计的事件协议和 pub/sub 实现
Requires
- php: >=5.6.0
- illuminate/config: ^4.0
- illuminate/events: ^4.0
- illuminate/support: ^4.0
- superbalist/json-guard-cached: ^1.0
- superbalist/laravel4-psr6-cache-bridge: 1.0.1
- superbalist/laravel4-pubsub: ^2.0.4|^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-07-25 12:11:50 UTC
README
为 Laravel 4 设计的事件协议和 pub/sub 实现。
此包是连接 php-event-pubsub 到 Laravel 的封装器。它基于现有的 laravel4-pubsub 包,增加了通过 pub/sub 发布和订阅事件的功能。
如果您不熟悉 laravel4-pubsub
包,建议首先查看他们的 文档。
对于 Laravel 5 支持,使用包 https://github.com/Superbalist/laravel-event-pubsub
安装
composer require superbalist/laravel4-event-pubsub
该包内置了默认配置。
要自定义配置文件,请使用 Artisan 发布包配置。
php artisan config:publish superbalist/laravel4-event-pubsub
然后您可以在 app/config/packages/superbalist/laravel4-event-pubsub/config.php
中编辑生成的配置。
在 app.php 中注册服务提供者
'providers' => [ // ... 'Superbalist\Laravel4EventPubSub\PubSubEventsServiceProvider', ]
在 app.php 中注册外观
'aliases' => [ // ... 'PubSubEvents' => 'Superbalist\Laravel4EventPubSub\PubSubEventsFacade', ]
使用方法
简单事件
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 事件。
您可以监听以下事件来连接这些
$events = app('events'); // or just use the facade Events $events->listen('pubsub.events.translation_failure', function ($message) { // the message failed to translate into an event }); $events->listen('pubsub.events.listen_expr_failure', function (\Superbalist\EventPubSub\EventInterface $event, $expr) { // the event didn't match the listen expression // this isn't really an error, but can be useful for debug }); $events->listen('pubsub.events.validation_failure', function (\Superbalist\EventPubSub\ValidationResult $result) { // the event failed validation var_dump($result->errors()); });