Eventos personalizados en Laravel

En este artículo, vamos a explorar los conceptos básicos de la gestión de eventos en Laravel. Es una de las características importantes que usted, como desarrollador, debe tener en su arsenal en el marco deseado. A medida que avancemos, también aprovecharemos esta oportunidad para crear un ejemplo del mundo real de un evento y oyente personalizado, y ese es el objetivo final de este artículo también..

El concepto de eventos en Laravel se basa en un patrón de diseño de software muy popular: el patrón observador. En este patrón, se supone que el sistema genera eventos cuando ocurre algo, y usted podría definir oyentes que escuchen estos eventos y reaccionen en consecuencia. Es una característica realmente útil de una manera que le permite desacoplar componentes en un sistema que de otro modo habría resultado en un código estrechamente acoplado..

Por ejemplo, supongamos que desea notificar a todos los módulos en un sistema cuando alguien inicia sesión en su sitio. Por lo tanto, les permite reaccionar ante este evento de inicio de sesión, ya sea sobre el envío de un correo electrónico o una notificación dentro de la aplicación, o cualquier otra cosa que quiera reaccionar ante este evento de inicio de sesión..

Fundamentos de eventos y oyentes

En esta sección, exploraremos la forma en que Laravel implementa eventos y oyentes en el marco central. Si está familiarizado con la arquitectura de Laravel, probablemente sepa que Laravel implementa el concepto de un proveedor de servicios que le permite inyectar diferentes servicios en una aplicación..

Del mismo modo, Laravel proporciona un incorporado EventServiceProvider.php Clase que nos permite definir mapeos de escucha de eventos para una aplicación..

Sigue adelante y tira de la app / Providers / EventServiceProvider.php expediente.

 ['App \ Listeners \ EventListener',],]; / ** * Registrar cualquier evento para su aplicación. * * @return void * / public function boot () parent :: boot (); //

Echemos un vistazo de cerca a la $ escucha propiedad, que le permite definir una serie de eventos y escuchas asociados. Las claves de la matriz corresponden a eventos en un sistema, y ​​sus valores corresponden a escuchas que se activarán cuando el evento correspondiente se genere en un sistema..

Prefiero pasar por un ejemplo del mundo real para demostrarlo más. Como probablemente sepa, Laravel proporciona un sistema de autenticación integrado que facilita funciones como inicio de sesión, registro y similares..

Suponga que desea enviar la notificación por correo electrónico, como medida de seguridad, cuando alguien inicie sesión en la aplicación. Si Laravel no admite la función de escucha de eventos, es posible que haya terminado de editar la clase principal o alguna otra forma de conectar su código que envía un correo electrónico..

De hecho, estás en el lado más afortunado ya que Laravel te ayuda a resolver este problema usando el detector de eventos. Revisemos el app / Providers / EventServiceProvider.php archivo para parecerse a la siguiente.

 ['App \ Listeners \ SendEmailNotification',],]; / ** * Registrar cualquier evento para su aplicación. * * @return void * / public function boot () parent :: boot (); //

Illuminate \ Auth \ Events \ Login Es un evento que será planteado por el. Autenticación complemento cuando alguien inicia sesión en una aplicación. Hemos vinculado ese evento a la App \ Listeners \ SendEmailNotification oyente, por lo que se activará en el evento de inicio de sesión.

Por supuesto, necesitas definir la App \ Listeners \ SendEmailNotification Clase de oyente en primer lugar. Como siempre, Laravel te permite crear un código de plantilla de un oyente usando el comando artisan.

evento artesanal php: generar

Este comando genera las clases de eventos y oyentes enumeradas en el $ escucha propiedad.

En nuestro caso, el Illuminate \ Auth \ Events \ Login El evento ya existe, por lo que solo crea el App \ Listeners \ SendEmailNotification clase de oyente. De hecho, habría creado el Illuminate \ Auth \ Events \ Login clase de evento también si no existiera en primer lugar.

Echemos un vistazo a la clase de oyente creada en app / Listeners / SendEmailNotification.php.

Es el encargarse de método que se invocará con las dependencias apropiadas cuando se active el escucha. En nuestro caso, el $ evento el argumento debe contener información contextual sobre el inicio de sesión registrado en la información del usuario.

Y podemos usar el $ evento objeto de llevar a cabo un mayor procesamiento en el encargarse de método. En nuestro caso, queremos enviar la notificación por correo electrónico al usuario que ha iniciado sesión..

El revisado encargarse de El método puede parecer algo como:

identificador de función pública (inicio de sesión $ evento) // obtener sesión en el correo electrónico y nombre de usuario del usuario $ correo electrónico = $ evento-> usuario-> correo electrónico; $ username = $ evento-> usuario-> nombre; // enviar una notificación por correo electrónico sobre el inicio de sesión

Así es como se supone que debes usar la función de eventos en Laravel. A partir de la siguiente sección, continuaremos y crearemos un evento personalizado y una clase de escucha asociada..

Crear un evento personalizado

El escenario de ejemplo que vamos a utilizar para nuestro ejemplo es algo como esto:

  • Una aplicación necesita borrar cachés en un sistema en ciertos puntos. Elevaremos el Caché claro Evento junto con la información contextual cuando una aplicación hace lo anterior. Pasaremos las claves del grupo de caché junto con un evento que se borró.
  • Otros módulos en un sistema pueden escuchar el Caché claro evento y le gustaría implementar código que calienta cachés relacionados.

Revisemos el app / Providers / EventServiceProvider.php archiva y registra nuestros eventos personalizados y mapeos de oyentes.

 ['App \ Listeners \ WarmUpCache',],]; / ** * Registrar cualquier evento para su aplicación. * * @return void * / public function boot () parent :: boot (); //

Como puedes ver, hemos definido la App \ Eventos \ ClearCache evento y clase de oyente asociado App \ Listeners \ WarmUpCache bajo la $ escucha propiedad.

A continuación, necesitamos crear archivos de clase asociados. Recuerde que siempre puede usar el comando de artesano para generar un código de plantilla base.

evento artesanal php: generar

Eso debería haber creado la clase de evento en aplicación / Eventos / ClearCache.php y la clase de oyente en app / Listeners / WarmUpCache.php.

Con unos pocos cambios, la aplicación / Eventos / ClearCache.php La clase debería verse así:

cache_keys = $ cache_keys;  / ** * Obtener los canales que el evento debe transmitir. * * @return Channel | array * / public function broadcastOn () return new PrivateChannel ('channel-name'); 

Como habrás notado, hemos añadido una nueva propiedad. $ cache_keys que se utilizará para contener información que se pasará junto con un evento. En nuestro caso, vamos a pasar los grupos de caché que fueron vaciados.

A continuación, echemos un vistazo a la clase de oyente con una actualización encargarse de método en app / Listeners / WarmUpCache.php.

cache_keys) && count ($ event-> cache_keys)) foreach ($ event-> cache_keys as $ cache_key) // generar caché para esta clave // ​​warm_up_cache ($ cache_key)

Cuando se invoca al oyente, el encargarse de El método se pasa con la instancia del evento asociado. En nuestro caso, debería ser la instancia de la Limpiar cache evento que será pasado como el primer argumento a la encargarse de método.

A continuación, es solo una cuestión de iterar a través de cada clave de caché y de calentar las cachés asociadas.

Ahora, tenemos todo en su lugar para probar cosas en contra. Vamos a crear rápidamente un archivo de controlador en app / Http / Controllers / EventController.php para demostrar como puedes levantar un evento.

En primer lugar, hemos pasado una serie de claves de caché como primer argumento al crear una instancia de Limpiar cache evento.

La función de ayuda de eventos se utiliza para generar un evento desde cualquier lugar dentro de una aplicación. Cuando se levanta el evento, Laravel llama a todos los oyentes que escuchan ese evento en particular.

En nuestro caso, el App \ Listeners \ WarmUpCache el oyente está configurado para escuchar el App \ Eventos \ ClearCache evento. Por lo tanto, la encargarse de método de la App \ Listeners \ WarmUpCache El escucha se invoca cuando el evento se genera desde un controlador. El resto es calentar los cachés que fueron borrados.!

Así es como puedes crear eventos personalizados en tu aplicación y trabajar con ellos..

¿Qué es un suscriptor de eventos??

El suscriptor de eventos le permite suscribir múltiples escuchas de eventos en un solo lugar. Si desea agrupar de forma lógica a los oyentes de eventos o si desea contener eventos en crecimiento en un solo lugar, es el suscriptor de eventos que está buscando.

Si hubiéramos implementado los ejemplos analizados hasta ahora en este artículo usando el suscriptor del evento, podría tener este aspecto.

usuario-> correo electrónico; $ username = $ evento-> usuario-> nombre; // enviar una notificación por correo electrónico sobre el inicio de sesión ... / ** * Manejar eventos de cierre de sesión de usuarios. * / función pública warmUpCache ($ event) if (isset ($ event-> cache_keys) && count ($ event-> cache_keys)) foreach ($ event-> cache_keys as $ cache_keys) // generar caché para esta clave // warm_up_cache ($ cache_key) / ** * Registrar los escuchas para el suscriptor. * * @param Illuminate \ Events \ Dispatcher $ events * / public function suscribe ($ events) $ events-> listen ('Illuminate \ Auth \ Events \ Login', 'App \ Listeners \ ExampleEventSubscriber @ sendEmailNotification'); $ events-> listen ('App \ Events \ ClearCache', 'App \ Listeners \ ExampleEventSubscriber @ warmUpCache'); 

Es el suscribir Método que se encarga de registrar los oyentes. El primer argumento de la suscribir método es la instancia de la Iluminar \ Eventos \ Despachador clase que podría usar para vincular eventos con oyentes usando el escucha método.

El primer argumento de la escucha El método es un evento que desea escuchar, y el segundo argumento es un oyente al que se llamará cuando se produzca el evento..

De esta manera, puede definir múltiples eventos y escuchas en la propia clase de suscriptor.

La clase de suscriptores del evento no se recogerá automáticamente. Necesitas registrarlo en el EventServiceProvider.php clase bajo el $ suscriptor propiedad, como se muestra en el siguiente fragmento de código.

Así que esa fue la clase de suscriptores del evento a su disposición, y con eso hemos llegado al final de este artículo también.

Conclusión

Hoy hemos discutido un par de las características emocionantes de los eventos y oyentes de Laravel. Se basan en el patrón de diseño del observador que le permite generar eventos en toda la aplicación y permitir que otros módulos escuchen esos eventos y reaccionen en consecuencia.

¿Se está actualizando en Laravel o busca expandir su conocimiento, sitio o aplicación con extensiones? Tenemos una variedad de cosas que puedes estudiar en Envato Market..

!