Press "Enter" to skip to content

Eventos en Laravel y Lumen 5.3

laravel

Eventos en Laravel y Lumen 5.3

Antes de Iniciar debemos comprender exactamente lo que es un evento.

¿Que es un evento?

Un evento, es un suceso, un acontecimiento que se desencadena en un determinado momento.

Por ejemplo, tenemos un procedimiento para el registro de usuario: ingreso de datos, validación, etc… hasta que al final terminamos el registro del usuario, ahí mismo es donde podemos desencadenar un evento el cual por ejemplo puede llamarse: UsuarioRegistrado este al ser un evento puede ser usado por los oyentes de eventos que estarán al pendiente de que ocurra un evento un específico para desencadenar una acción.

Oyente de Eventos

Como se dijo ahí arriba este oyente de eventos estará a la escucha de que se origine un evento en específico para desencadenar una acción, por ejemplo nosotros podemos crear un oyente de eventos llamado BienvenidaUsuario, lo que hará es mandar un mensaje de correo electrónico cada vez que un usuario nuevo se registre. En este caso, este oyente estará a la escucha de que sea disparado un evento llamado UsuarioRegistrado, en el momento que ocurra podemos desencadenar la acción de enviarle un mensaje de bienvenida.

Ahora bien como ya sabemos que son los eventos y los oyente de eventos agarremos código:


En Lumen

Para habilitar eventos en lumen tenemos que descomentar la linea del archivo bootstrap/app.php

//Buscamos esta linea y la descomentamos
$app->register(App\Providers\EventServiceProvider::class);

Registrando Eventos y Oyentes (Laravel y Lumen)

Para poder registrar un evento en laravel y lumen, tenemos que editar el archivo app/Providers/EventServiceProvider.php en donde tendremos que registrar los eventos y sus oyentes.

    protected $listen = [
        'App\Events\UsuarioRegistrado' => [
            'App\Listeners\BienvenidaUsuario',
        ],
    ];

Como lo observamos, registramos el evento App\Events\UsuarioRegistrado y sus respectivos oyentes en este caso App\Listeners\BienvenidaUsuario

Hecho esto, en laravel los eventos se pueden generar automáticamente con el siguiente comando:

# Solo en laravel
php artisan event:generate

Esto creará automáticamente las clases correspondientes en los lugares que corresponden. Todo lo que haremos manualmente event:generate ya lo ha hecho por nosotros, en cambio en lumen tenemos que hacerlo de forma manual.

Es así que vamos a la carpeta app/Events para crear nuestro evento:

Creando el evento UsuarioRegistrado (Laravel y Lumen)

Ingresamos a la carpeta app/Events/ y creamos el archivo UsuarioRegistrado.php

<?php

namespace App\Events;

use App\User;

class UsuarioRegistrado extends Event
{
    public $usuario;

    public function __construct(User $usuario)
    {
        $this->usuario = $usuario;
    }
}

Como vemos aquí sencillamente creamos el evento el cual va a recibir a la clase User como parametro para posteriormente ser utilizado por un oyente

Creando el oyente BienvenidaUsuario (Laravel y Lumen)

Nos ubicamos en la carpeta app/Listeners y creamos el archivo BienvenidaUsuario.php este será nuestro oyente

<?php
namespace App\Listeners;

use App\Events\UsuarioRegistrado;

class BienvenidaUsuario
{
    public function __construct()
    {

    }

    public function handle(UsuarioRegistrado $event)
    {
        // Aqui podemos acceder al usuario mediante $event->usuario;
                // Creamos la lógica para enviar un mensaje de bienvenida
    }
}

Disparando un Evento (Laravel y Lumen)

Para disparar un evento por elemplo dentro de nuestro controlador

    public function store(Request $request)
    {

         //Toda la logica para registrar el usuario validaicones etc

        //Registrando nuestro usuario
        $usuario = \App\User::create($request->input());

        //Disparamos el evento
        event(new \App\Events\UsuarioRegistrado($usuario));

        return response()->json($usuario, 201);
    }

Para disparar el evento en lumen también se puede usar el “facade” Event::fire(new \App\Events\UsuarioRegistrado($usuario)) practicamente es lo mismo.

Y por último hablaré de los Suscriptores de eventos

Suscriptores de eventos (Laravel y Lumen)

A diferencia de los oyentes un suscriptor de eventos es un objeto que no solamente esta a la escucha de un evento, sino que puede suscribirse a varios eventos y de esta manera estar pendiente de los mismos, veamos el ejemplo:

para este ejemplo, creamos un suscriptor de eventos en app/Listeners/Suscriptor.php

<?php
namespace App\Listeners;

class Suscriptor
{
    public function onUsuarioRegistrado($event)
    {
        // Lo que ocurre cuando el usuario se ha registrado
    }

    public function onOtroEvento($event)
    {
        // Lo que ocurre cuando el Otro Evento se dispara
    }

    //Nos suscribimos a los eventos que deseamos
    public function subscribe($events)
    {
        $events->listen(
            'App\Events\UsuarioRegistrado',
            'App\Listeners\Suscriptor@onUsuarioRegistrado'
        );

        $events->listen(
            'App\Events\OtroEvento',
            'App\Listeners\Suscriptor@onOtroEvento'
        );
    }
}

Por último para poderlo habilitar el suscriptor abrimos el fichero app/Providers/EventServiceProvider.php y añadimos:

    protected $subscribe = [
        'App\Listeners\Suscriptor',
    ];

De esta manera nuestro suscriptor podrá manejar multiples eventos.

Espero que este material te haya sido de apoyo, si tienes alguna duda o sugerencia no dudes en comentarlo.
Gracias.

Adolfo Cuadros
Adolfo Cuadros

View all posts