webman event
1.0.0
ミドルウェアと比較したイベントの利点は、イベントがミドルウェアよりも正確に配置され (または粒度が細かく)、一部のビジネス シナリオの拡張により適していることです。例えば、私たちは通常、登録やログイン後に一連の操作を実行する必要があるユーザーに遭遇します。イベントシステムを介して、元のコードを侵害することなくログイン操作の拡張を完了できるため、システムの結合が軽減されるだけでなく、バグの可能性も減ります。
composer require tinywan/event
イベントクラスLogErrorWriteEvent.php
namespace extend ;
use Symfony Contracts EventDispatcher Event ;
class LogErrorWriteEvent extends Event
{
const NAME = ' log.error.write ' ; // 事件名,事件的唯一标识
public $ log ;
public function __construct ( array $ log )
{
$ this -> log = $ log ;
}
public function handle ()
{
return $ this -> log ;
}
}
イベントリスニング
return [
// 事件监听
' listener ' => [
extend LogErrorWriteEvent:: NAME => extend LogErrorWriteEvent::class,
extend DingTalkEvent:: NAME => extend DingTalkEvent::class,
],
];
サブスクリプションLoggerSubscriber.php
namespace extend ;
use Symfony Component EventDispatcher EventSubscriberInterface ;
use Symfony Contracts EventDispatcher Event ;
class LoggerSubscriber implements EventSubscriberInterface
{
public static function getSubscribedEvents (): array
{
// 监听的不同事件,当事件触发时,会调用 onResponse 方法
return [
extend LogErrorWriteEvent:: NAME => ' onResponse ' ,
extend DingTalkEvent:: NAME => ' onResponse ' ,
];
}
/**
* @desc: 触发事件
* @param Event $event
*/
public function onResponse ( Event $ event )
{
// 一些具体的业务逻辑
var_dump ( $ event -> handle ());
}
}
イベントのサブスクリプション
return [
// 事件订阅
' subscriber ' => [
extend LoggerSubscriber::class
],
];
LogErrorWriteEvent
イベントをトリガーします。
$ error = [
' errorMessage ' => '错误消息' ,
' errorCode ' => 500
];
Tinywan Event:: trigger ( new extend LogErrorWriteEvent ( $ error ), extend LogErrorWriteEvent:: NAME );
$ error = [
' errorMessage ' => '错误消息' ,
' errorCode ' => 500
];
event ( new extend LogErrorWriteEvent ( $ error ), extend LogErrorWriteEvent:: NAME );
実行結果
このプロジェクトは、Apache 2.0 ライセンスに基づいてライセンスされています。