EventDispatcher: Entkoppelte Ereignisse
Lösen Sie Ereignisse aus und reagieren Sie mit Symfonys EventDispatcher auf sie.
EventDispatcher: Entkoppelte Ereignisse ist eine kostenlose PHP Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des PHP Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der PHP Academy-Kurs umfasst insgesamt 4 Lektionen.
Was ist EventDispatcher?
Symfony EventDispatcher implementiert das Observer-Muster. Code löst Events aus, auf die Listener reagieren, ohne dass der Dispatcher etwas über die Listener wissen muss.
Installieren
Installieren Sie die Komponente.
$ composer require symfony/event-dispatcherEin Event erstellen
Ein Event ist eine einfache PHP-Klasse, die häufig optional Event erweitert und Daten enthält.
<?php
use Symfony\Contracts\EventDispatcher\Event;
class UserRegisteredEvent extends Event
{
public const NAME = "user.registered";
public function __construct(public readonly User $user) {}
}Einen Listener erstellen
Ein Listener ist ein aufrufbares Objekt oder ein Objekt, das auf ein bestimmtes Event reagiert.
<?php
class SendWelcomeEmailListener
{
public function __invoke(UserRegisteredEvent $event): void
{
mail($event->user->email, "Welcome!", "Thanks for joining!");
}
}Listener registrieren
Fügen Sie dem Dispatcher Listener hinzu.
<?php
use Symfony\Component\EventDispatcher\EventDispatcher;
$dispatcher = new EventDispatcher();
$dispatcher->addListener(
UserRegisteredEvent::NAME,
new SendWelcomeEmailListener()
);Ein Event auslösen
Lösen Sie das Event aus. Alle registrierten Listener werden in der Reihenfolge ihrer Priorität aufgerufen.
<?php
$user = new User("alice@example.com");
$dispatcher->dispatch(new UserRegisteredEvent($user), UserRegisteredEvent::NAME);Listener-Priorität
Übergeben Sie eine Ganzzahl als Priorität an dritter Stelle an addListener(). Höhere Zahlen werden zuerst ausgeführt (Standard: 0).
<?php
$dispatcher->addListener("user.registered", $logListener, 10); // runs first
$dispatcher->addListener("user.registered", $emailListener, 0); // runs secondEvent-Subscriber
Ein Event-Subscriber ist eine Klasse, die ihre Listener selbst registriert, indem sie EventSubscriberInterface implementiert.
<?php
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class UserSubscriber implements EventSubscriberInterface
{
public static function getSubscribedEvents(): array {
return [
UserRegisteredEvent::NAME => "onUserRegistered",
];
}
public function onUserRegistered(UserRegisteredEvent $event): void {
// ...
}
}Propagation stoppen
Rufen Sie innerhalb eines Listeners $event->stopPropagation() auf, um die Ausführung nachfolgender Listener zu verhindern.
In Laravel
Laravel verfügt über ein eigenes Event-System. Lösen Sie Events mit event(new UserRegistered($user)) aus. Registrieren Sie Listener im EventServiceProvider oder verwenden Sie das Attribut #[Listen].
Vorteile einer ereignisgesteuerten Architektur
Events entkoppeln Komponenten: Der Registrierungsservice muss den E-Mail-Service nicht importieren. Neue Verhaltensweisen wie Logging oder Analytics lassen sich durch das Registrieren neuer Listener hinzufügen, ohne bestehenden Code zu ändern.
Zusammenfassung
Erstellen Sie Event-Klassen mit Daten, fügen Sie Listener mit addListener() hinzu und lösen Sie Events mit $dispatcher->dispatch() aus. Verwenden Sie Subscriber für Listener-Gruppen, die sich selbst registrieren.
Kurzer Check
Wie verhindern Sie, dass nachfolgende Listener ausgeführt werden?
Lerne PHP mit einem KI-Tutor — kostenlos
Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.
- Kurse
- 49
- Lektionen
- 195
Häufig gestellte Fragen
Ist die Lektion „EventDispatcher: Entkoppelte Ereignisse“ kostenlos?
Ja — der vollständige Text von „EventDispatcher: Entkoppelte Ereignisse“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des PHP Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der PHP Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „EventDispatcher: Entkoppelte Ereignisse“?
Lösen Sie Ereignisse aus und reagieren Sie mit Symfonys EventDispatcher auf sie. Du übst PHP Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um PHP Academy zu starten?
Keine Vorkenntnisse erforderlich. PHP Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.
Wie lange dauert die Lektion „EventDispatcher: Entkoppelte Ereignisse“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser PHP Academy-Lektion Code schreiben und ausführen?
Ja. Jede PHP Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- HttpFoundation: Request und Response
- DependencyInjection-Container
- EventDispatcher: Entkoppelte Ereignisse
- Console-Komponente: CLI-Befehle