Los eventos reciben un lavado de cara en esta nueva versión de Laravel e incorporan múltiples características que serán de nuestro agrado.
Como ya hemos visto en el artículo sobre comandos, éstos son una acción imperativa. Es decir, un controlador llama a un comando y éste debe procesarse obligatoriamente.
Los eventos funcionan de forma similar salvo que de manera informativa. Es decir, un evento se dispara mediante un comando o una acción, y de nosotros depende capturar ese evento para procesarlo o no.
Generar eventos
Ahora disponemos de un nuevo comando de artisan
para generar eventos. Utilizaremos php artisan make:event EventName
para generar el siguiente fichero:
;
;
;
Generar handlers para eventos
A diferencia de los comandos, nuestro evento no posee un método handle()
puesto que los eventos se crearon con la idea de ser capturados de forma independiente en cualquier parte de nuestra aplicación.
Aún así, si queremos generar un handler para capturar el evento, podemos utilizar el comando php artisan handler:event EventHandlerName
. A este comando de artisan
también podemos pasarle el flag --event "EventName"
para indicar cual es la clase del evento que manipula el handler, y de igual manera que con los comandos, podemos agregar --queued
si queremos añadir el handler a la cola de procesamiento.
A modo de referencia, el handler para eventos contiene lo siguiente:
;
;
;
;
Si utilizamos --event
entonces el método handle
contendrá lo siguiente: public function handle(EventName $event)
.
Como disparar y capturar eventos
Para disparar un evento utilizaremos cualquiera de las dos formas:
Event::;
;
Para capturar un evento hay dos maneras, bien utilizando un listener o haciendo uso de un handler de eventos.
En el primer caso, basta con utilizar lo siguiente:
Event::
;
En el caso del handler, debemos informar a Laravel de la asociación entre el evento y su(s) handler(s). Esto se hace editando el fichero app/Providers/EventServiceProvider.php
y modificando el array $listen
:
protected $listen = [
'App\Events\EventName' => [
'App\Handlers\Events\EventHandlerName',
'App\Handlers\Events\EventHandlerName2',
// ...
],
];
Si queremos ahorrar tiempo generando los eventos y los handlers uno a uno, basta con escribir nuestro array $listen
y utilizar el comando php artisan event:generate
. Todos nuestros eventos y handlers se crearán automáticamente en sus respectivos directorios.