webman event
1.0.0
Keuntungan dari event dibandingkan dengan middleware adalah bahwa event diposisikan lebih akurat (atau lebih granular) dibandingkan middleware, dan lebih cocok untuk perluasan beberapa skenario bisnis. Misalnya, kami biasanya menjumpai pengguna yang perlu melakukan serangkaian operasi setelah mendaftar atau masuk. Melalui sistem acara, kami dapat menyelesaikan perluasan operasi masuk tanpa menyerang kode asli, yang tidak hanya mengurangi penggandengan sistem, tetapi juga juga mengurangi kemungkinan BUG.
composer require tinywan/event
Kelas 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 ;
}
}
mendengarkan acara
return [
// 事件监听
' listener ' => [
extend LogErrorWriteEvent:: NAME => extend LogErrorWriteEvent::class,
extend DingTalkEvent:: NAME => extend DingTalkEvent::class,
],
];
Langganan 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 ());
}
}
langganan acara
return [
// 事件订阅
' subscriber ' => [
extend LoggerSubscriber::class
],
];
Memicu peristiwa 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 );
Hasil eksekusi
Proyek ini dilisensikan di bawah lisensi Apache 2.0.