Versionen im Vergleich

Schlüssel

  • Diese Zeile wurde hinzugefügt.
  • Diese Zeile wurde entfernt.
  • Formatierung wurde geändert.

Was sind Hooks?

...

(Quelle: Wikipedia)

Was sind Events? 

Ein Ereignis (englisch event) dient in der Softwaretechnik – bei Entwicklung nach dem ereignisorientieren Programmierparadigma – zur Steuerung des Programmflusses. Das Programm wird nicht linear durchlaufen, sondern es werden spezielle Ereignisbehandlungsroutinen (engl. listenerobserverevent handler) immer dann ausgeführt, wenn ein bestimmtes Ereignis auftritt. Ereignisorientierte Programmierung gehört zu den parallelen Programmiertechniken, hat also deren Vor- und Nachteile.

(Quelle: Wikipedia)

EventDispatcher

...

Der EventHandler steht global in allen Controller-Klassen zur Verfügung. Er liefert den EventDispatcher, wie bei Symfony beschrieben:
. Weiterlesen https://symfony.com/doc/current/components/event_dispatcher.html

...

languagephp
themeRDark

...

Ein Event

...

feuern

Codeblock
languagephpthemeRDark
$event = new Event\TestEvent();
$this
   ->getEventManager()
   ->dispatch(Event\TestEvent::NAME, $event)
;
  • TestSubscriber muss von \Symfony\Component\EventDispatcher\EventSubscriberInterface ableiten
  • Der Subscriber registriert das Event Event\TestEvent::NAME
  • Der Subscriber muss im Ordner Lib/Subscriber liegen

Subscriber nutzen

Die Methode dispatch() benachrichtigt alle Listener (bzw. Subscriber) über das gegebene Ereignis. Es benötigt zwei Argumente: die Event-Instanz, die an jeden Listener dieses Ereignisses übergeben werden soll, und den Namen des zu versendenden Ereignisses:

Codeblock
languagephp
class ComponentValidatorSubscriber extends Event\EventSubscriberAbstract
{
    public static function getSubscribedEvents(): array
    {
        return [
            Event\TestEvent::NAME => ['onPopulateTest', 800],
        ];
    }

    public function onPopulateTest(Event\TestEvent $event): void
    {
        $this
            ->staticController(Lib\Listener\Test\PopulateTest::class)
            ->process($event)
        ;
    }
}

Umgang mit Events

Der eventDispatcher kann in jeder Controller-Klasse direkt genutzt werden. Der EventHandler stellt die Funktionen des Dispatcher wie folgt zur Verfügung.

Codeblock
languagephpthemeRDark
$this
  ->getEventHandler()
  ->getDispatcher()
;

App strukturieren

Die Pfade innerhalb eines Packages sind definiert. Siehe Eine App erstellen