La ventaja de los eventos en comparación con el middleware es que los eventos están ubicados con mayor precisión (o más granulares) que el middleware y son más adecuados para la expansión de algunos escenarios comerciales. Por ejemplo, generalmente nos encontramos con usuarios que necesitan realizar una serie de operaciones después de registrarse o iniciar sesión. A través del sistema de eventos, podemos completar la expansión de la operación de inicio de sesión sin invadir el código original, lo que no solo reduce el acoplamiento del sistema, sino que También reduce la posibilidad de ERROR.
composer require tinywan/event
LogErrorWriteEvent.php
de eventoLogErrorWriteEvent.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 ;
}
}
escucha de eventos
return [
// 事件监听
' listener ' => [
extend LogErrorWriteEvent:: NAME => extend LogErrorWriteEvent::class,
extend DingTalkEvent:: NAME => extend DingTalkEvent::class,
],
];
LoggerSubscriber.php
de suscripciónLoggerSubscriber.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 ());
}
}
suscripción al evento
return [
// 事件订阅
' subscriber ' => [
extend LoggerSubscriber::class
],
];
Activa el evento 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 );
Resultado de la ejecución
Este proyecto está bajo la licencia Apache 2.0.