L'avantage des événements par rapport au middleware est que les événements sont positionnés avec plus de précision (ou plus granulaires) que le middleware et sont plus adaptés à l'expansion de certains scénarios métier. Par exemple, nous rencontrons généralement des utilisateurs qui doivent effectuer une série d'opérations après leur inscription ou leur connexion. Grâce au système d'événements, nous pouvons terminer l'expansion des opérations de connexion sans envahir le code d'origine, ce qui non seulement réduit le couplage du système, mais réduit également la possibilité de BUG.
composer require tinywan/event
Événement 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 ;
}
}
écoute d'événements
return [
// 事件监听
' listener ' => [
extend LogErrorWriteEvent:: NAME => extend LogErrorWriteEvent::class,
extend DingTalkEvent:: NAME => extend DingTalkEvent::class,
],
];
Abonnement 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 ());
}
}
abonnement à un événement
return [
// 事件订阅
' subscriber ' => [
extend LoggerSubscriber::class
],
];
Déclenchez l'événement 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 );
Résultat de l'exécution
Ce projet est sous licence Apache 2.0.