
Introducción
Antes de empezar con este tutorial de events y listeners de Laravel 8, me gustaría puntualizar una cosa. Sé que muchas veces los términos usados en el blog descolocan un poco a todo aquel que no tiene experiencia con las tecnologías que vemos aquí, aún así, lo mejor para todos, es que la gente se acostumbre a nombrar ciertas cosas como tienen que nombrarse, en este caso en inglés.
Si es cierto que, aunque me gusta practicar este idioma en mis programaciones, incorporando nombres en variables describiendo su función en inglés, muchas veces y más cuando trabajo en equipo, suelo usar el idioma que más nos comunica, en mi caso el español y, en ocasiones, incluso el gallego.
Ahora bien, centrándonos en el tema que hoy nos atañe, vamos a explicar la función de los Events (o eventos) y los Listeners (u escuchadores) en Laravel 8. Como decía al principio, tendrás que acostumbrarte a ver estos términos con sus nombres reales, ya que aunque describen su función en inglés, lo cierto es que su nombre es ese, por lo que los events y listeners, seguirán llamándose así en este tutorial.
Comencemos
Laravel proporciona un mecanismo sencillo para los events y los listeners, de modo que cuando quieras suscribirte o escuchar cualquier event de tu aplicación, puedas hacerlo fácilmente. Puedes registrar eventos con sus listeners y decidir qué quieres que hagan después de una determinada acción. Por ejemplo, cuando se crea un nuevo pedido, queremos enviar un correo o un SMS al vendedor. Para simplificar, podemos decir que un evento es una acción realizada en la aplicación, y el listener es la operación que responde al evento.
En este tutorial, aprenderemos y exploraremos los events y listeners de Laravel 8. Desarrollaremos una pequeña aplicación de demostración en la que enviaremos un correo electrónico cada vez que se cree un usuario. En este escenario, podemos decir que la creación de un usuario es un event, y el listener enviará un email al escuchar el event.
Registrar el event y el listener
El primer paso es registrar el event y el listener respectivo. Para ello, Laravel proporciona un archivo EventServiceProvider.php donde puedes definir los events y los listeners.
La propiedad $listen contiene un array para registrar todos los events y listeners como pares clave-valor. Define los events y listeners como se muestra a continuación.
protected $listen = [
Registered::class => [
SendEmailVerificationNotification::class,
],
'App\Event\UserCreated' => [
'App\Listeners\SendEmail'
]
];
Una vez que hayas registrado el event y el listener, ejecuta el siguiente comando para crear los archivos del event y del listener respectivos.
php artisan event:generate
El comando anterior generará los siguientes dos archivos:
- UserCreated en app/Events
- SendEmail en app/Listeners
Una vez que hemos terminado con la configuración de los events y listeners de Laravel 8, ahora es el momento de ponernos manos a la obra en la parte lógica.
Definir la lógica del event

En esta sección, definiremos la acción ( event ) sobre la que queremos que el conjunto de lógica sea realizado por el listener; en nuestra app de demostración, la acción es crear un usuario.
Abre App\Events\UserCreated.php y utiliza el siguiente código para pasar la dirección de correo electrónico real como $email al método __construct de la clase UserCreated
public $email;
public function __construct($email)
{
$this->email = $email;
}
The entire file will look like this.
namespace App\Event;
use Illuminate\Broadcasting\Channel;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
class UserCreated implements ShouldQueue
{
use Dispatchable, InteractsWithSockets, SerializesModels;7i
public $email;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct($email)
{
$this->email = $email;
}
/**
* Get the channels the event should broadcast on.
*
* @return \Illuminate\Broadcasting\Channel|array
*/
public function broadcastOn()
{
return new PrivateChannel('channel-name');
}
}
Aquí heredamos la interfaz ShouldQueue utilizando la clase UserCreated que implementa ShouldQueue, que colocará automáticamente la lógica en la cola.
Definir la lógica del listener: Método handle()
Aquí escribiremos la lógica real para enviar un correo electrónico cada vez que se cree el usuario. En App\Listeners\SendEmail.php, pasa el parámetro UserCreated $event al método handle() para que podamos tener un valor del event. La lógica dentro del método handle() se ejecutará siempre que se llame al event.
public function handle(UserCreated $event)
{
print_r($event->email);
//Podemos enviar un correo desde aquí
echo ".. De los listeners";
exit;
}
Event de envío
Después de crear el event y el listener, ahora es el momento de enviarlo. Es bastante sencillo; sólo tienes que pasar el objeto de la clase event al método event().
event (new UserCreated(“abc@gmail.com”));
Conclusión
Espero que este tutorial Events y listeners de Laravel 8 con ejemplo te haya servido para entender cómo funciona y qué posibilidades trae con ellos. Para cualquier consulta o sugerencia, no dudes en ponerte en contacto con nosotros.
Hola buenas, soy un programador que está empezando y quisiera saber lo siguiente:
¿Se asignan los listeners a los events o se asignan los events a los listeners? si es así, ¿Cómo es la manera de hacerlo?
Sin más que añadir, un saludo de parte de MikePonce desde Nicaragua.
Gracias por tu atención.