0Pricing
PHP Academy · Leçon

EventDispatcher : événements découplés

Distribuer des événements et les écouter avec EventDispatcher de Symfony.

EventDispatcher : événements découplés est une leçon PHP Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage PHP Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours PHP Academy comprend 4 leçons au total.

Qu’est-ce que EventDispatcher ?

Symfony EventDispatcher implémente le modèle Observateur. Le code distribue des événements ; les écouteurs y réagissent, sans que le répartiteur ne sache quoi que ce soit à leur sujet.

Installation

Installez le composant.

$ composer require symfony/event-dispatcher

Création d’un événement

Un événement est une classe PHP simple, qui étend souvent Event (facultatif) et contient des données.

<?php
use Symfony\Contracts\EventDispatcher\Event;

class UserRegisteredEvent extends Event
{
    public const NAME = "user.registered";

    public function __construct(public readonly User $user) {}
}

Création d’un écouteur

Un écouteur est un appelable ou un objet qui réagit à un événement précis.

<?php
class SendWelcomeEmailListener
{
    public function __invoke(UserRegisteredEvent $event): void
    {
        mail($event->user->email, "Welcome!", "Thanks for joining!");
    }
}

Enregistrement des écouteurs

Ajoutez les écouteurs au répartiteur.

<?php
use Symfony\Component\EventDispatcher\EventDispatcher;

$dispatcher = new EventDispatcher();
$dispatcher->addListener(
    UserRegisteredEvent::NAME,
    new SendWelcomeEmailListener()
);

Distribution d’un événement

Distribuez l’événement : tous les écouteurs enregistrés sont appelés dans l’ordre de priorité.

<?php
$user = new User("alice@example.com");
$dispatcher->dispatch(new UserRegisteredEvent($user), UserRegisteredEvent::NAME);

Priorité des écouteurs

Transmettez un entier de priorité comme troisième argument à addListener(). Les valeurs les plus élevées sont exécutées en premier (valeur par défaut : 0).

<?php
$dispatcher->addListener("user.registered", $logListener, 10);   // runs first
$dispatcher->addListener("user.registered", $emailListener, 0);  // runs second

Abonnés aux événements

Un abonné aux événements est une classe qui enregistre elle-même ses écouteurs en implémentant EventSubscriberInterface.

<?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 {
        // ...
    }
}

Arrêt de la propagation

Appelez $event->stopPropagation() dans un écouteur pour empêcher l’exécution des écouteurs suivants.

Dans Laravel

Laravel possède son propre système d’événements. Distribuez un événement avec event(new UserRegistered($user)). Enregistrez les écouteurs dans EventServiceProvider ou utilisez l’attribut #[Listen].

Avantages d’une architecture événementielle

Les événements découplent les composants : le service d’inscription n’importe pas le service de messagerie. Vous pouvez ajouter de nouveaux comportements (journalisation, analyse) en enregistrant de nouveaux écouteurs, sans modifier le code existant.

Résumé

Créez des classes d’événements contenant des données, ajoutez des écouteurs avec addListener() et distribuez les événements avec $dispatcher->dispatch(). Utilisez des abonnés pour les groupes d’écouteurs qui s’enregistrent eux-mêmes.

Vérification rapide

Comment empêcher l’exécution des écouteurs suivants ?

Questions Fréquemment Posées

La leçon « EventDispatcher : événements découplés » est-elle gratuite ?

Oui — le texte complet de « EventDispatcher : événements découplés » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours PHP Academy, passe à CoddyKit PRO. Le cours PHP Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « EventDispatcher : événements découplés » ?

Distribuer des événements et les écouter avec EventDispatcher de Symfony. Tu pratiques PHP Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer PHP Academy ?

Aucune expérience préalable n'est requise. PHP Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.

Combien de temps prend la leçon « EventDispatcher : événements découplés » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon PHP Academy ?

Oui. Chaque leçon PHP Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. HttpFoundation : requête et réponse
  2. Conteneur DependencyInjection
  3. EventDispatcher : événements découplés
  4. Composant Console : commandes CLI
← Retour à PHP Academy