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..
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 elencargarse 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ónAsí 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:
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ó.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 elApp \ Eventos \ ClearCache
evento. Por lo tanto, laencargarse de
método de laApp \ 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 lasuscribir
método es la instancia de laIluminar \ Eventos \ Despachador
clase que podría usar para vincular eventos con oyentes usando elescucha
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..
!