domingo, 23 de marzo de 2025

Top 5 de la semana

Artículos relacionados

Captación de eventos en Laravel: guía completa y ejemplos

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 eventos dentro de la aplicación.

¿Qué es el sistema de eventos en Laravel?

El sistema de eventos en Laravel permite desacoplar ciertas 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 con:

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 un evento. Supongamos que estamos construyendo un sistema de pedidos y queremos lanzar un evento 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

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 en Laravel

Para probar si el evento y listener funcionan 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 en Laravel.
  • Registrar y despachar eventos.
  • Ejecutar eventos en segundo plano con colas.

Este sistema nos permite mejorar la estructura de nuestra aplicación y hacerla más mantenible y escalable.

Jordi Morillo
Jordi Morillohttps://www.programador-web.com
Soy un programador PHP Senior con más de 20 años de experiencia en desarrollo web y administración de sistemas Linux, especializado en Symfony y metodologías ágiles como Scrum. He trabajado con tecnologías como MySQL, MongoDB y WordPress, y siempre busco nuevas oportunidades para seguir aprendiendo y aplicando mis conocimientos.

DEJA UNA RESPUESTA

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

Artículos populares