0Pricing
PHP Academy · Lección

EventDispatcher: eventos desacoplados

Envíe y escuche eventos mediante EventDispatcher de Symfony.

EventDispatcher: eventos desacoplados es una lección gratuita de PHP Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de PHP Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de PHP Academy incluye 4 lecciones en total.

¿Qué es EventDispatcher?

Symfony EventDispatcher implementa el patrón Observer. El código despacha eventos y los listeners reaccionan a ellos, sin que el dispatcher tenga que conocer nada sobre los listeners.

Instalación

Instale el componente.

$ composer require symfony/event-dispatcher

Crear un evento

Un evento es una clase PHP sencilla que a menudo extiende Event (opcional) y transporta datos.

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

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

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

Crear un listener

Un listener es un callable o un objeto que reacciona a un evento específico.

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

Registrar listeners

Asocie listeners al dispatcher.

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

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

Despachar un evento

Despache el evento; todos los listeners registrados se llaman por orden de prioridad.

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

Prioridad de los listeners

Pase un entero de prioridad como tercer argumento a addListener(). Los números más altos se ejecutan primero (valor predeterminado: 0).

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

Suscriptores de eventos

Un suscriptor de eventos es una clase que registra sus propios listeners al implementar 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 {
        // ...
    }
}

Detener la propagación

Llame a $event->stopPropagation() dentro de un listener para impedir que se ejecuten los listeners posteriores.

En Laravel

Laravel tiene su propio sistema de eventos. Despache eventos con event(new UserRegistered($user)). Registre listeners en EventServiceProvider o utilice el atributo #[Listen].

Ventajas de la arquitectura basada en eventos

Los eventos desacoplan los componentes: el servicio de registro no importa el servicio de correo electrónico. Puede añadir nuevos comportamientos, como el registro o el análisis, registrando nuevos listeners sin modificar el código existente.

Resumen

Cree clases de eventos con datos, asocie listeners con addListener() y despache eventos con $dispatcher->dispatch(). Utilice suscriptores para agrupar listeners que se registran automáticamente.

Comprobación rápida

¿Cómo se impide que se ejecuten los listeners posteriores?

Preguntas frecuentes

¿La lección «EventDispatcher: eventos desacoplados» es gratis?

Sí — el texto completo de «EventDispatcher: eventos desacoplados» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de PHP Academy, actualiza a CoddyKit PRO. El curso de PHP Academy incluye 4 lecciones en total.

¿Qué aprenderé en «EventDispatcher: eventos desacoplados»?

Envíe y escuche eventos mediante EventDispatcher de Symfony. Practicas PHP Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar PHP Academy?

No se requiere experiencia previa. PHP Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «EventDispatcher: eventos desacoplados»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de PHP Academy?

Sí. Cada lección de PHP Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. HttpFoundation: solicitudes y respuestas
  2. Contenedor de inyección de dependencias
  3. EventDispatcher: eventos desacoplados
  4. Componente Console: comandos CLI
← Volver a PHP Academy