Der Vorteil von Ereignissen im Vergleich zu Middleware besteht darin, dass Ereignisse genauer positioniert (oder detaillierter) sind als Middleware und sich besser für die Erweiterung einiger Geschäftsszenarien eignen. Beispielsweise stoßen wir normalerweise auf Benutzer, die nach der Registrierung oder Anmeldung eine Reihe von Vorgängen ausführen müssen. Durch das Ereignissystem können wir die Erweiterung des Anmeldevorgangs abschließen, ohne in den Originalcode einzudringen, was nicht nur die Kopplung des Systems verringert, sondern auch verringert auch die Möglichkeit von 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 ;
}
}
Ereignisabhören
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 ());
}
}
Veranstaltungsabonnement
return [
// 事件订阅
' subscriber ' => [
extend LoggerSubscriber::class
],
];
Lösen Sie das LogErrorWriteEvent
Ereignis aus.
$ 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 );
Ausführungsergebnis
Dieses Projekt ist unter der Apache 2.0-Lizenz lizenziert.