¿Qué es un Observador?

Los observadores en Laravel son clases que se utilizan para escuchar y manejar eventos específicos de los modelos, como crear, actualizar, eliminar, entre otros. Facilitan la ejecución de acciones automáticas cuando ocurren estos eventos, permitiendo que el código sea más limpio y modular al concentrar la lógica relacionada con los eventos en un lugar separado.

Más información en esta liga https://refactoring.guru/es/design-patterns/observer

Principales beneficios de usar Observadores

  1. Modularidad: Permiten separar la lógica de eventos del modelo, manteniendo el modelo más limpio y enfocado en sus datos y relaciones.
  2. Automatización de tareas: Al manejar eventos como created, updated, deleted, etc., es posible ejecutar acciones automáticas, como crear registros relacionados, enviar notificaciones o actualizar valores en otros modelos.
  3. Manejo de eventos comunes: Si tienes varios modelos con eventos similares, puedes crear observadores para que el comportamiento sea consistente.

Ejemplo de eventos que pueden manejar los Observadores

  • creating y created: Se activan antes y después de que un modelo se guarda por primera vez.
  • updating y updated: Se activan antes y después de que un modelo existente se actualice.
  • deleting y deleted: Se activan antes y después de que un modelo se elimine.
  • saving y saved: Se activan antes y después de que un modelo se guarde, tanto al crear como al actualizar.

Ejemplo de un caso práctico

Supongamos que tienes un modelo Pedido, y cada vez que se crea un pedido quieres enviar una notificación al usuario. Puedes crear un Observador para el modelo Pedido y dentro del evento created, enviar la notificación automáticamente cuando el pedido se registre en la base de datos.

Crear y Registrar un Observador

Crear el Observador:

php artisan make:observer PedidoObserver --model=Pedido

Se va a generar este archivo dentro de app/Observers

<?php

namespace App\Observers;

use App\Models\Pedido;

class PedidoObserver
{
    /**
    * Handle the Pedido "created" event.
    */
    public function created(Pedido $pedido): void
    {
        //
    }

    /**
    * Handle the Pedido "updated" event.
    */
    public function updated(Pedido $pedido): void
    {
        //
    }

    /**
    * Handle the Pedido "deleted" event.
    */
    public function deleted(Pedido $pedido): void
    {
        //
    }

    /**
    * Handle the Pedido "restored" event.
    */
    public function restored(Pedido $pedido): void
    {
        //
    }

    /**
    * Handle the Pedido "force deleted" event.
    */
    public function forceDeleted(Pedido $pedido): void
    {
        //
    }
}

Definir el método created en el Observador:

public function created(Pedido $pedido)
{
    // Lógica para enviar la notificación o realizar acciones tras la creación del pedido.
}

Registrar el Observador en AppServiceProvider o en un proveedor de servicios dedicado:

use App\Models\Pedido;
use App\Observers\PedidoObserver;

public function boot()
{
    Pedido::observe(PedidoObserver::class);
}

Con esto, cada vez que se crea un Pedido, el método created en el Observador se ejecutará automáticamente. Los observadores en Laravel son muy útiles para mantener la lógica de los eventos bien organizada y garantizar que se cumplan ciertas condiciones o acciones en momentos clave del ciclo de vida del modelo.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *