0Pricing
PHP Academy · Lezione

EventDispatcher: eventi disaccoppiati

Inviare e ascoltare eventi usando EventDispatcher di Symfony.

EventDispatcher: eventi disaccoppiati è una lezione PHP Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento PHP Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso PHP Academy include 4 lezioni in totale.

Che cos'è EventDispatcher?

Symfony EventDispatcher implementa il pattern Observer. Il codice invia gli eventi e i listener reagiscono a essi, senza che il dispatcher debba conoscere i listener.

Installazione

Installi il componente.

$ composer require symfony/event-dispatcher

Creazione di un evento

Un evento è una semplice classe PHP, che spesso estende Event (facoltativo) e trasporta dei dati.

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

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

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

Creazione di un listener

Un listener è un callable o un oggetto che reagisce a un evento specifico.

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

Registrazione dei listener

Colleghi i listener al dispatcher.

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

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

Invio di un evento

Invii l'evento: tutti i listener registrati vengono chiamati in ordine di priorità.

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

Priorità dei listener

Passi un numero intero che indica la priorità come terzo argomento a addListener(). I numeri più alti vengono eseguiti per primi (valore predefinito: 0).

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

Subscriber di eventi

Un subscriber di eventi è una classe che registra autonomamente i propri listener implementando 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 {
        // ...
    }
}

Interruzione della propagazione

Chiami $event->stopPropagation() all'interno di un listener per impedire l'esecuzione dei listener successivi.

In Laravel

Laravel dispone di un proprio sistema di eventi. Invii gli eventi con event(new UserRegistered($user)). Registri i listener in EventServiceProvider oppure utilizzi l'attributo #[Listen].

Vantaggi dell'architettura basata sugli eventi

Gli eventi disaccoppiano i componenti: il servizio di registrazione non importa il servizio di posta elettronica. Può aggiungere nuovi comportamenti (registrazione, analisi) registrando nuovi listener senza modificare il codice esistente.

Riepilogo

Crei classi evento con i relativi dati, colleghi i listener con addListener() e invii gli eventi con $dispatcher->dispatch(). Utilizzi i subscriber per gruppi di listener che si registrano autonomamente.

Verifica rapida

Come si impedisce l'esecuzione dei listener successivi?

Domande Frequenti

La lezione «EventDispatcher: eventi disaccoppiati» è gratuita?

Sì — il testo completo di «EventDispatcher: eventi disaccoppiati» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso PHP Academy, passa a CoddyKit PRO. Il corso PHP Academy include 4 lezioni in totale.

Cosa imparerò in «EventDispatcher: eventi disaccoppiati»?

Inviare e ascoltare eventi usando EventDispatcher di Symfony. Eserciti PHP Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare PHP Academy?

Non è richiesta alcuna esperienza precedente. PHP Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.

Quanto tempo richiede la lezione «EventDispatcher: eventi disaccoppiati»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione PHP Academy?

Sì. Ogni lezione PHP Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. HttpFoundation: richiesta e risposta
  2. Container DependencyInjection
  3. EventDispatcher: eventi disaccoppiati
  4. Componente Console: comandi CLI
← Torna a PHP Academy