Eventhandling

Standardpresenter wie der Data-Add-Presenter lassen sich oft nur schwer anpassen und erweitern. Manchmal ist die Änderung so klein, das sich eine eigene abgeleitete Klasse nicht lohnt. Hier kommt die Eventqueue der Anwendung ins Spiel. Sie hilft nicht nur beim Presenter, sondern bei allen Arten von Interobjektkommunikation.

Die Bearbeitung der Events erfolgt sequenziel an der Stelle an der die Events geworfen werden. Über die Payload des Events können Objekte übergeben werden. Die Objekte können vom jeweiligen Handler geändert werden. Die nachfolgenden Handler greifen somit nicht mehr auf die Originaldaten zu.

/**
 * Event ist der Träger der Informationen
 */
class MyEvent extends \Alvine\Core\Event\Event {

}

/**
 * Subscriber der als Empfänger dient
 * Sobald ein Event getriggert wird, wird handleEvent aufgerufen.
 */
class MySubscriber extends \Alvine\Core\Event\Handler {

    public function handleEvent(\Alvine\Core\Event\Event $event) {
        // do something
    }

}

/**
 * Subscriber definieren 
 * Hier ist es wichtig, dass die richtige 
 * Event-Queue mit Namespace abonniert wird. 
 * In diesme Fall ist es \MyEvent und nicht MyEvent (Namespace)
 */
$app->subscribeEvent(new MySubscriber, '\MyEvent');


/** Event triggern */
$app->triggerEvent(new MyEvent($app, 'do', 
    new \Alvine\Types\StringType('payload')));