Apariencia
EventBus y observadores
EventBus es un despachador síncrono basado en EventBusTrait. La API visible en el código es attach(), detach(), notify(), setCacheMechanism() y getLastEvent().
Registrar y notificar
El observer debe implementar update($data). La interfaz IObserver está vacía y no declara el método, aunque notify() lo invoca.
php
use Boctulus\Simplerest\Core\Interfaces\IObserver;
use Boctulus\Simplerest\Core\Libs\EventBus;
$observer = new class implements IObserver {
public function update(mixed $data): void
{
// Reaccionar al payload recibido.
}
};
$bus = new EventBus();
$bus->attach($observer);
$bus->notify(['type' => 'order.created', 'order_id' => 42]);
$bus->detach($observer);Los observers se indexan por identidad de objeto; adjuntar la misma instancia dos veces no duplica la entrada. notify($data) pasa sólo ese argumento a cada observer, en orden. Si uno lanza una excepción, el recorrido se interrumpe y el bus no la captura.
Último evento y límites
notify() también persiste el payload con el driver configurado. El predeterminado es DBCache; usa la clave fija eventbus_last_event con TTL de siete días. Buses distintos comparten esa clave; no hay canales nombrados ni historial.
php
use Boctulus\Simplerest\Core\Libs\InMemoryCache;
EventBus::setCacheMechanism(InMemoryCache::class);El driver debe implementar ICache. El driver predeterminado depende de que la tabla cache exista y sea utilizable; no se comprobó una conexión para esta guía.
El payload no se acompaña de un nombre de evento separado: no hay una API subscribe()/publish() en esta clase. Los hooks de Model son extensiones independientes y no se emiten automáticamente a través del EventBus. Se inspeccionó el código, sin ejecutar el controller de demostración; no se encontró una suite focalizada en unit-tests/.