Al usar Laravel, hay una excelente manera de escuchar eventos y luego tomar acciones basadas en esos eventos usando Event Facade. Esto también se conoce como implementación observable. Al utilizar Event Facade, podemos escuchar o suscribirnos a eventos que puedan ocurrir y luego tomar medidas de inmediato. Es una excelente manera de mantener limpio su código, además de tener una clase dedicada para manejar eventos.

¿Por qué utilizar Event Listeners?

En su solicitud, puede haber muchas cosas a las que deberá responder. Tal vez desee responder a un usuario que inicia sesión o cierra la sesión. Quizás le gustaría enviar un correo electrónico de bienvenida a un nuevo usuario que acaba de registrarse, o enviar un correo electrónico de despedida a un usuario que acaba de eliminar su cuenta. Hay todo tipo de cosas para las que puede usar estos detectores de eventos. Sí, todas estas cosas se pueden hacer en el controlador, pero tal vez sería mejor configurar algunos oyentes de eventos para que podamos disparar un evento para encargarnos de cosas como esta.

Usando eventos en su archivo route.php

Poner eventos en su routes.phparchivo es bueno para realizar pruebas o para aplicaciones pequeñas. Más adelante veremos una mejor manera de almacenar sus eventos de Laravel, pero por ahora, vamos a preparar algunos sencillos en nuestro routes.phparchivo para divertirnos. Podemos comenzar con Event :: listen () y Event :: fire () . Este ejemplo trata de un usuario que inicia sesión y luego realiza una acción basada en el evento de inicio de sesión.

rutas.php

Cuando visitemos la página de inicio, veremos que el evento se disparó con éxito string 'a user just logged in' (length=21).

Pasar datos a un receptor de eventos

También podemos pasar datos al oyente. En este ejemplo, tomaremos un usuario de la base de datos y luego dispararemos un evento. Cuando disparamos el evento, podemos pasar el $usercomo segundo parámetro. En nuestro oyente, podemos aceptar ese argumento para el cierre y obtener acceso a su contenido:

Puede usar los métodos Event :: fire () y Event :: listen () en cualquier lugar que desee. Muchas veces, puede usarlos directamente en sus controladores.

Clase de evento dedicada

Una forma diferente de utilizar los detectores de eventos es mediante el método Event :: subscribe () . Con este enfoque, puede crear una instancia de una clase directamente o pasar una cadena al método y Laravel intentará crear una instancia de esa clase desde el contenedor de IoC. Veamos un ejemplo de cómo hacer esto.

El código anterior coloca nuestro manejo de eventos en una clase dedicada. En este caso lo llamamos UserEventHandler . Luego, podemos usar Event :: subscribe ('UserEventHandler') para escuchar si los eventos se activan . En nuestra ruta de inicio, luego disparamos el user.logoutevento, y su oyente asociado activa su lógica, que en este caso es simplemente hacer eco en la pantalla de que el usuario ha cerrado la sesión.

Agregar más eventos a la clase

Ahora que tiene una clase dedicada para manejar eventos para sus usuarios, ¡puede rastrear lo que hacen como los dickens! Configure un oyente para lo que quiera. Puede tener inicio de sesión, cierre de sesión, suscripción al boletín informativo y más. El orden de operación para agregar más oyentes es agregar los oyentes adicionales a su método subscribe () en su nueva clase, definir esos métodos adicionales para tomar acción y luego disparar esos eventos donde quiera. Veamos cómo se ve:

Dónde colocar los oyentes de eventos

Así que esto ha sido muy útil hasta ahora. Estamos configurando oyentes de eventos y tomando medidas en esos eventos con y sin una clase dedicada. Hemos podido hacer que esto funcione en el archivo de rutas, pero ese no será un buen lugar para colocar estos oyentes. Después de las estructura de archivos laravel ejemplos, vamos a crear un dedicado Manipuladores de carpeta para guardar todo este material. Los pasos para configurar esto son los siguientes:

  • 1: Crea el espacio de nombres

    En este ejemplo, tenemos un laratutespacio de nombres dentro de la carpeta de nuestra aplicación. Entonces laratutdentro , ahora podemos crear una Handlerscarpeta para albergar nuestra nueva clase. Solo recuerde tener la carga automática psr-4 registrada en su composer.jsonpara que Laravel sepa dónde viven estos archivos. Para este ejemplo, nuestro fragmento podría verse así, "psr-4": { "laratut\": "app/laratut" }aunque el suyo podría ser diferente según su espacio de nombres. Si no está seguro de su psr-4, consulte el Tutorial de carga automática de Composer .

  • 2: Crear clase de manejo de eventos

    Dentro de su nuevo espacio de nombres, cree el nuevo archivo de clase. Al nuestro le llamamos UserEventHandler.php. En este archivo, simplemente eliminamos la clase que habíamos definido previamente en el archivo de rutas y la colocamos en este archivo. Sin embargo, tenga en cuenta que ahora necesita realizar algunas actualizaciones de espacio de nombres en este archivo, ya que ahora vive en un espacio de nombres diferente. Básicamente, debe agregar su espacio de nombres particular en la parte superior del archivo, así como anteponer los métodos de controlador codificados con el espacio de nombres. En este ejemplo, el espacio de nombres está laratutHandlersen la parte superior del archivo, simplemente agregamos namespace laratutHandlers;y anteponemos el espacio de nombres a los controladores como se ve aquí. Nuestro archivo actualizado ahora se ve así:

    UserEventHandler.php

  • 3: Registrar suscripción

    Todavía necesitamos tener una forma de registrar la suscripción para que podamos escuchar cuándo se activan los eventos. Antes simplemente teníamos nuestra suscripción al evento en nuestro archivo de rutas y todo estaba bien. Ahora que hemos movido todo a un espacio de nombres, tendremos que incluir el espacio de nombres al pasar la cadena al método de suscripción y si no desea que eso abarrote su archivo de rutas, simplemente puede moverlo app/start/global.phpdespués de la aplicación: : método down () así:

  • 4: disfruta de un código más limpio

    ¡Mira lo limpio y elegante que es tu archivo de rutas ahora!

¡Increíble! Cuando visita la página de inicio ahora, todo sigue funcionando, y ahora tiene una clase dedicada donde puede agregar tantos oyentes como desee para tomar medidas en los eventos activados. ¡Muy divertido de verdad!