Saltar a contenido

Sistema de Eventos (BaseEventDispatcher)

El framework utiliza un sistema de eventos centralizado para desacoplar componentes y permitir la ejecución de lógica adicional sin modificar el núcleo o los módulos principales.


👂 Escuchar un Evento

Para suscribirse a un evento, se utiliza el método listen. Los escuchadores suelen registrarse en src/app/config/final-configurations-includes/event-listeners.php.

use PiecesPHP\Core\BaseEventDispatcher;

BaseEventDispatcher::listen('NombreEvento', function($payload) {
    // Lógica a ejecutar cuando se dispare el evento
    error_log("Evento disparado con datos: " . json_encode($payload));
}, 'MiContexto');

🚀 Disparar un Evento

Desde cualquier parte de tu código (un controlador, un mapper, etc.), puedes notificar que algo ha ocurrido:

use PiecesPHP\Core\BaseEventDispatcher;

$datos = ['id' => 10, 'status' => 'activo'];
BaseEventDispatcher::dispatch('MiContexto', 'NombreEvento', $datos);

⚙️ Eventos del Sistema (Default Events)

El framework dispara eventos predefinidos en momentos críticos del ciclo de vida. Es recomendable usar defaultListen para estos casos:

Nombre del Evento Cuándo se dispara
EVENT_INIT_ROUTES_NAME Al terminar de registrar todas las rutas del sistema.
EVENT_ADD_DYNAMIC_TRANSLATIONS_NAME Tras cargar las traducciones dinámicas desde la base de datos.

Ejemplo de uso:

use PiecesPHP\Core\BaseEventDispatcher;

BaseEventDispatcher::defaultListen(BaseEventDispatcher::EVENT_INIT_ROUTES_NAME, function() {
    // Las rutas ya están listas, podemos añadir middleware global dinámico
});

🧊 Contextos

Los contextos permiten agrupar eventos relacionados (por ejemplo, AppRoutes, UserSystem, Mailing). Esto evita colisiones de nombres de eventos entre diferentes módulos.