Преимущество событий по сравнению с промежуточным программным обеспечением заключается в том, что события позиционируются более точно (или более детально), чем промежуточное программное обеспечение, и больше подходят для расширения некоторых бизнес-сценариев. Например, мы обычно сталкиваемся с пользователями, которым необходимо выполнить ряд операций после регистрации или входа в систему. С помощью системы событий мы можем завершить расширение операции входа в систему, не вторгаясь в исходный код, что не только уменьшает связанность системы, но и также снижает вероятность ОШИБКИ.
composer require tinywan/event
LogErrorWriteEvent.php
события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.