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-dispatcherCrear 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 secondSuscriptores 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
- HttpFoundation: solicitudes y respuestas
- Contenedor de inyección de dependencias
- EventDispatcher: eventos desacoplados
- Componente Console: comandos CLI