Manejo elegante de errores con la función rescue de Laravel

  • Publicado el 09 enero, 2025
  • Palabras: 68

El manejo de excepciones no debería interrumpir el flujo de tu aplicación. La función rescue de Laravel ofrece una forma limpia de ejecutar código potencialmente peligroso y al mismo tiempo, mantener un funcionamiento fluido.

Manejo elegante de errores con la función rescue de Laravel

#Uso básico

La función rescue() ejecuta el clousure dado y captura cualquier excepción que se produzca durante su ejecución. Todas las excepciones que se capturen se enviarán a su controlador de excepciones; sin embargo, la solicitud continuará procesándose:

 

// Simple usage
return rescue(function () {
    return $this->method();
});

// With default value
return rescue(function () {
    return $this->method();
}, false);

// With fallback closure
return rescue(function () {
    return $this->method();
}, function () {
    return $this->failure();
});

 

#Ejemplo práctico

A continuación se muestra una implementación práctica para una integración de API:

 

class ExternalServiceIntegration
{
    public function fetchUserData($userId)
    {
        return rescue(function () use ($userId) {
            $response = Http::get("api.example.com/users/{$userId}");
            return $response->json();
        }, [
            'id' => $userId,
            'status' => 'unavailable',
            'error' => 'Could not fetch user data'
        ]);
    }

    public function syncProducts()
    {
        return rescue(
            function () {
                $products = $this->api->getProducts();
                foreach ($products as $product) {
                    $this->updateLocalProduct($product);
                }
                return true;
            },
            function () {
                Cache::put('sync_failed', true, now()->addHour());
                return false;
            },
            report: function (Throwable $e) {
                return !($e instanceof TemporaryException);
            }
        );
    }
}

// Usage in controller
class ProductController extends Controller
{
    public function index(ExternalServiceIntegration $service)
    {
        $synced = $service->syncProducts();
        
        return response()->json([
            'success' => $synced,
            'message' => $synced 
                ? 'Products synchronized successfully' 
                : 'Sync failed, using cached data'
        ]);
    }
}

 

La función rescue proporciona una forma limpia de manejar errores potenciales mientras mantiene una estructura de código legible.

Antonio Jenaro
Antonio Jenaro

Web Developer

Archivado en:

Fuente: Harris Raftopoulos

Inicia la conversación

Hazte miembro de Antonio Jenaro para comenzar a comentar.

Regístrate ahora

¿Ya estás registrado? Inicia sesión