webman event
1.0.0
미들웨어에 비해 이벤트의 장점은 이벤트가 미들웨어보다 더 정확하게 배치(또는 더 세분화)되고 일부 비즈니스 시나리오의 확장에 더 적합하다는 것입니다. 예를 들어, 우리는 일반적으로 등록이나 로그인 후 일련의 작업을 수행해야 하는 사용자를 접하게 됩니다. 이벤트 시스템을 통해 원래 코드를 침해하지 않고 로그인 작업 확장을 완료할 수 있으며 이는 시스템의 결합을 줄일 뿐만 아니라 또한 BUG 가능성을 줄입니다.
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 라이선스에 따라 라이선스가 부여됩니다.