SDK Laravel
Pageviews serveur automatiques (middleware), façade pour les événements : le tracking se fait à 100 % côté serveur, sans cookie de pistage ni JS, invisible pour les adblockers. Compatible Laravel 10 à 13, PHP ≥ 8.1.
Installation
composer require quiet-metrics/laravel-metrics
Le service provider et l'alias de façade sont enregistrés automatiquement (package discovery).
Configuration
Les variables d'environnement suffisent dans la plupart des cas :
QUIET_METRICS_PUBLIC_KEY=qm_pub_XXXXXXXXXXXXXXXXX QUIET_METRICS_SECRET_KEY=qm_sec_XXXXXXXXXXXXXXXX # QUIET_METRICS_ENDPOINT=https://quietmetrics.dev/api/v1/collect
Fichier de configuration publiable si besoin (config/quiet-metrics.php) :
php artisan vendor:publish --tag=quiet-metrics-config
Pageviews automatiques
Le middleware quiet-metrics envoie la page vue dans terminate(), après l'envoi de la réponse : aucun impact sur la latence perçue. Par route ou par groupe :
Route::middleware('quiet-metrics')->group(function () { Route::get('/', HomeController::class); // … });
Pour mesurer tout le trafic web d'un coup (Laravel 11+) :
// bootstrap/app.php ->withMiddleware(function (Middleware $middleware) { $middleware->appendToGroup('web', \QuietMetrics\Laravel\Middleware\TrackPageview::class); })
Sont ignorés automatiquement : les requêtes non GET, les réponses en erreur, l'AJAX et les requêtes qui attendent du JSON. Vos API et vos formulaires ne polluent donc pas les statistiques.
Événements
use QuietMetrics\Laravel\Facades\QuietMetrics; QuietMetrics::event('inscription', ['plan' => 'pro']);
Depuis un job, une commande ou un listener (hors requête HTTP), il n'y a pas d'URL courante : passez-la explicitement, sinon rien ne part (abandon silencieux) :
QuietMetrics::event('import-termine', ['lignes' => 1200], [ 'url' => 'https://monsite.fr/imports', ]);
Cas particuliers
Octane, workers persistants. Le contexte (URL, referrer, IP, User-Agent, langue) vient de l'objet Request de chaque requête, jamais des superglobales. Rien à configurer.
Reverse proxy / CDN. Le middleware lit $request->ip() : configurez les trusted proxies de votre application Laravel comme d'habitude, et l'IP réelle du visiteur suivra. L'option trust_proxy_headers du SDK cœur ne sert que hors Laravel.
Environnements. Utilisez une clé de site distincte par environnement (.env de staging vs production), ou ne mettez simplement pas de clé en staging : sans clé publique, rien n'est envoyé.
Tests. Le client est un singleton du conteneur : remplacez-le pour vérifier vos événements sans réseau.
use QuietMetrics\Client; $fake = $this->mock(Client::class); $fake->shouldReceive('event')->once()->with('inscription', ['plan' => 'pro'], []); $this->post('/register', [...])->assertRedirect();
Contrat de robustesse
L'envoi est non bloquant (socket fire-and-forget, ~1 ms perçu, repli cURL court) et tout échec est silencieux : l'analytics ne casse jamais le site hôte, même si la plateforme est injoignable.
Vous ne trouvez pas votre réponse ?
Le support répond en français, les jours ouvrés.