Paquetes PHP imprescindibles: Guzzle, Carbon, Monolog y Symfony VarDumper

Hay cuatro paquetes de Composer que aparecen en casi todos los proyectos PHP modernos: Guzzle para peticiones HTTP, Carbon para manejo de fechas, Monolog para logs estructurados y Symfony VarDumper para depuración. Aprender a usarlos con ejemplos reales ahorra tiempo desde el primer día.

Guzzle: cliente HTTP

Guzzle es el cliente HTTP más popular en el ecosistema PHP. Ofrece una API fluida para realizar peticiones GET, POST, PUT, DELETE y gestionar cabeceras, autenticación, timeouts y middleware de forma sencilla.

<?php
require __DIR__ . '/vendor/autoload.php';

use GuzzleHttpClient;
use GuzzleHttpExceptionRequestException;

$http = new Client([
    'base_uri' => 'https://jsonplaceholder.typicode.com/',
    'timeout'  => 5.0,
    'headers'  => ['Accept' => 'application/json'],
]);

// GET con parámetros de query
$respuesta = $http->get('posts', ['query' => ['userId' => 1]]);
$posts     = json_decode((string) $respuesta->getBody(), true);

// POST con JSON
try {
    $respuesta = $http->post('posts', [
        'json' => [
            'title'  => 'Nuevo post',
            'body'   => 'Contenido del post',
            'userId' => 1,
        ],
    ]);
    $nuevo = json_decode((string) $respuesta->getBody(), true);
    echo "Creado con ID: " . $nuevo['id'];
} catch (RequestException $e) {
    echo "Error: " . $e->getMessage();
}

// Petición asíncrona con promesas
$promesa = $http->getAsync('users/1');
$promesa->then(function ($res) {
    $usuario = json_decode((string) $res->getBody(), true);
    echo $usuario['name'];
})->wait();
?>

Carbon: fechas legibles

Carbon extiende DateTime de PHP con una API mucho más expresiva para crear, manipular y formatear fechas. Es la librería de fechas de referencia en el ecosistema PHP y la que usa Laravel internamente.

<?php
use CarbonCarbon;

// Crear instancias
$ahora    = Carbon::now();
$hoy      = Carbon::today();
$manana   = Carbon::tomorrow();
$navidad  = Carbon::parse('2024-12-25');
$fechaBD  = Carbon::createFromFormat('Y-m-d H:i:s', '2024-03-15 09:30:00');

// Diferencias legibles para humanos
echo Carbon::parse('2024-01-01')->diffForHumans(); // "hace X meses"

// Aritmética de fechas
$vencimiento = Carbon::now()->addDays(30)->startOfDay();
$inicio      = Carbon::now()->subMonths(3);

// Formateo
echo $ahora->format('d/m/Y H:i');            // "26/06/2024 10:30"
echo $ahora->toIso8601String();               // "2024-06-26T10:30:00+02:00"
echo $navidad->isoFormat('dddd, D [de] MMMM'); // "miércoles, 25 de diciembre"

// Comparaciones
if (Carbon::now()->isWeekend()) {
    echo 'Hoy es fin de semana.';
}
if ($vencimiento->isFuture()) {
    echo 'La suscripción sigue activa.';
}
?>

Monolog: logs estructurados

Monolog es el estándar de facto para logging en PHP. Implementa PSR-3, por lo que es compatible con cualquier framework que use esa interfaz. Funciona con canales, niveles de severidad (DEBUG, INFO, WARNING, ERROR...) y handlers intercambiables.

<?php
use MonologLogger;
use MonologHandlerStreamHandler;
use MonologHandlerRotatingFileHandler;
use MonologFormatterJsonFormatter;

// Logger básico a fichero
$log = new Logger('app');
$log->pushHandler(new StreamHandler('php://stdout', Logger::DEBUG));
$log->pushHandler(new StreamHandler('/var/log/errores.log', Logger::ERROR));

$log->debug('Iniciando proceso', ['paso' => 1]);
$log->info('Usuario autenticado', ['id' => 42, 'email' => '[email protected]']);
$log->warning('Reintento de conexión', ['intento' => 2]);
$log->error('Error al enviar email', ['excepcion' => 'SMTPException: timeout']);

// Fichero rotativo con formato JSON para ELK/Loki
$handler = new RotatingFileHandler('/var/log/app.log', 7, Logger::INFO);
$handler->setFormatter(new JsonFormatter());

$apiLog = new Logger('api');
$apiLog->pushHandler($handler);
$apiLog->info('Petición recibida', [
    'metodo' => $_SERVER['REQUEST_METHOD'],
    'uri'    => $_SERVER['REQUEST_URI'],
    'ip'     => $_SERVER['REMOTE_ADDR'],
]);
?>

Symfony VarDumper: depuración legible

VarDumper proporciona las funciones dump() y dd() como alternativas a var_dump(). La salida es coloreada, colapsable en el navegador y mucho más legible para estructuras complejas. dd() (dump and die) muestra el valor y detiene la ejecución.

<?php
require __DIR__ . '/vendor/autoload.php';

$datos = [
    'usuario' => [
        'id'     => 42,
        'nombre' => 'Ana García',
        'roles'  => ['admin', 'editor'],
        'activo' => true,
        'creado' => new DateTime('2024-01-15'),
    ],
    'permisos' => new ArrayObject(['leer', 'escribir', 'publicar']),
];

// dump() muestra el valor y continúa la ejecución
dump($datos);

// dd() muestra y para (útil para depuración rápida)
dd($datos['usuario']['roles']); // ya no llega al código siguiente

// También funciona en CLI con formato de texto plano
// php -r "require 'vendor/autoload.php'; dump(['a' => 1]);"
?>

La documentación oficial de cada paquete está disponible en Guzzle, Carbon, Monolog y Symfony VarDumper. Todos se instalan con Composer y están en Packagist.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP