Top 5 de la semana

Publicidad

Artículos relacionados

Eventos en Laravel: Guía para Desarrolladores

Laravel es un framework de PHP conocido por su elegancia y facilidad de uso. Una de sus características más poderosas es su sistema de eventos, que permite a los desarrolladores ejecutar acciones en respuesta a ciertos cambios dentro de la aplicación.

¿Qué es el sistema de eventos en Laravel?

El sistema de eventos permite desacoplar partes de una aplicación mediante la ejecución de eventos y la escucha de estos con listeners (escuchadores). Un evento es una acción o cambio en la aplicación, mientras que un listener es una clase que ejecuta lógica específica cuando ese evento ocurre.

Configuración inicial en Laravel

Antes de empezar, asegúrate de tener un proyecto Laravel funcionando. Si no lo tienes, puedes crear uno siguiendo la guía oficial de instalación de Laravel:

composer create-project --prefer-dist laravel/laravel MiProyecto

Luego, ingresa al directorio del proyecto:

cd MiProyecto

Ejecuta las migraciones para generar la estructura de base de datos inicial:

php artisan migrate

Creación de un evento en Laravel

Laravel nos proporciona el comando make:event para crear eventos. Supongamos que estamos construyendo un sistema de pedidos y queremos lanzar uno cuando se cree un pedido:

php artisan make:event PedidoCreado

Esto generará un archivo en app/Events/PedidoCreado.php con el siguiente código base:

namespace App\Events;

use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
use App\Models\Pedido;

class PedidoCreado
{
    use Dispatchable, SerializesModels;

    public $pedido;

    public function __construct(Pedido $pedido)
    {
        $this->pedido = $pedido;
    }
}

Creación de un Listener para capturar el evento

Ahora, creamos un listener que responderá a este evento:

php artisan make:listener EnviarNotificacionPedido --event=PedidoCreado

Este comando generará un archivo en app/Listeners/EnviarNotificacionPedido.php:

namespace App\Listeners;

use App\Events\PedidoCreado;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Mail;
use App\Mail\PedidoConfirmado;

class EnviarNotificacionPedido implements ShouldQueue
{
    use InteractsWithQueue;

    public function handle(PedidoCreado $event)
    {
        Mail::to($event->pedido->usuario->email)->send(new PedidoConfirmado($event->pedido));
    }
}

Registrar los eventos y listeners en Laravel

En app/Providers/EventServiceProvider.php, registramos el evento con su listener dentro de la propiedad $listen:

protected $listen = [
    PedidoCreado::class => [
        EnviarNotificacionPedido::class,
    ],
];

Para que Laravel detecte los cambios, ejecutamos:

php artisan event:clear
php artisan event:cache

(Más detalles sobre cómo trabajar con el Event Service Provider).

Lanzar el evento desde un controlador

En app/Http/Controllers/PedidoController.php, disparamos el evento cuando se crea un pedido:

namespace App\Http\Controllers;

use App\Models\Pedido;
use App\Events\PedidoCreado;
use Illuminate\Http\Request;

class PedidoController extends Controller
{
    public function store(Request $request)
    {
        $pedido = Pedido::create([
            'usuario_id' => auth()->id(),
            'total' => $request->total,
            'estado' => 'pendiente'
        ]);

        event(new PedidoCreado($pedido));

        return response()->json(['message' => 'Pedido creado y evento disparado.']);
    }
}

Probando el sistema de eventos

Para probar si todo funciona correctamente, podemos hacer una solicitud POST al endpoint:

curl -X POST http://localhost/api/pedidos \
     -H "Content-Type: application/json" \
     -H "Authorization: Bearer TU_TOKEN" \
     -d '{"total": 100.50}'

Conclusión

El sistema de eventos de Laravel es una herramienta increíblemente útil para desacoplar la lógica de negocio y responder de manera eficiente a los cambios en la aplicación. En este tutorial, aprendimos a:

  • Crear eventos y listeners.
  • Registrar y despachar eventos.
  • Ejecutar eventos en segundo plano con colas.

Este enfoque mejora la estructura de nuestras aplicaciones, haciéndolas más mantenibles y escalables.

Normas para comentar

Este espacio está abierto a todo el mundo, pero para que funcione bien necesitamos un poco de sentido común. No se permiten comentarios ofensivos, spam, ni enlaces promocionales. Respeta a los demás, escribe con educación y trata de aportar al tema.

Los comentarios que no sigan estas normas serán eliminados.

Gracias por mantener un buen ambiente.

DEJA UNA RESPUESTA

Por favor ingrese su comentario!
Por favor ingrese su nombre aquí