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.
