SDK Laravel
Páginas vistas automáticas del lado del servidor (middleware), una fachada para los eventos. El seguimiento se hace 100 % del lado del servidor, sin cookies de rastreo ni JS, invisible para los bloqueadores. Compatible con Laravel 10 a 13, PHP ≥ 8.1.
Instalación
composer require quiet-metrics/laravel-metrics
El service provider y el alias de fachada se registran automáticamente (package discovery).
Configuración
Las variables de entorno bastan en la mayoría de los casos:
QUIET_METRICS_PUBLIC_KEY=qm_pub_XXXXXXXXXXXXXXXXX QUIET_METRICS_SECRET_KEY=qm_sec_XXXXXXXXXXXXXXXX # QUIET_METRICS_ENDPOINT=https://quietmetrics.dev/api/v1/collect
Archivo de configuración publicable si es necesario (config/quiet-metrics.php):
php artisan vendor:publish --tag=quiet-metrics-config
Páginas vistas automáticas
El middleware quiet-metrics envía la página vista en terminate(), después del envío de la respuesta: ningún impacto en la latencia percibida. Por ruta o por grupo:
Route::middleware('quiet-metrics')->group(function () { Route::get('/', HomeController::class); // … });
Para medir todo el tráfico web de una vez (Laravel 11+):
// bootstrap/app.php ->withMiddleware(function (Middleware $middleware) { $middleware->appendToGroup('web', \QuietMetrics\Laravel\Middleware\TrackPageview::class); })
Se ignoran automáticamente: las peticiones no GET, las respuestas con error, el AJAX y las peticiones que esperan JSON; sus API y sus formularios no contaminan las estadísticas.
Eventos
use QuietMetrics\Laravel\Facades\QuietMetrics; QuietMetrics::event('registro', ['plan' => 'pro']);
Desde un job, un comando o un listener (fuera de una petición HTTP), no hay URL actual: pásela explícitamente; de lo contrario, no se envía nada (abandono silencioso):
QuietMetrics::event('importacion-terminada', ['filas' => 1200], [ 'url' => 'https://misitio.es/imports', ]);
Casos particulares
Octane, workers persistentes. El contexto (URL, referrer, IP, User-Agent, idioma) proviene del objeto Request de cada petición, nunca de las superglobales. No hay nada que configurar.
Reverse proxy / CDN. El middleware lee $request->ip(): configure los trusted proxies de su aplicación Laravel como de costumbre, y la IP real del visitante llegará correctamente. La opción trust_proxy_headers del SDK base solo sirve fuera de Laravel.
Entornos. Utilice una clave de sitio distinta por entorno (.env de staging vs producción), o simplemente no ponga ninguna clave en staging: sin clave pública, no se envía nada.
Tests. El cliente es un singleton del contenedor: sustitúyalo para verificar sus eventos sin red.
use QuietMetrics\Client; $fake = $this->mock(Client::class); $fake->shouldReceive('event')->once()->with('registro', ['plan' => 'pro'], []); $this->post('/register', [...])->assertRedirect();
Contrato de robustez
El envío es no bloqueante (socket fire-and-forget, ~1 ms percibido, respaldo cURL corto) y cualquier fallo es silencioso: la analítica nunca rompe el sitio anfitrión, incluso si la plataforma está inaccesible.
¿No encuentra su respuesta?
El soporte responde en días laborables.