Aller au contenu

Bundle Symfony

Pageviews serveur automatiques via kernel.terminate et configuration sémantique. Compatible Symfony 6.4 et 7, PHP ≥ 8.1.

Installation

composer require quiet-metrics/symfony-metrics

Sans Symfony Flex, enregistrez le bundle :

// config/bundles.php
return [
    // …
    QuietMetrics\Symfony\QuietMetricsBundle::class => ['all' => true],
];

Mettre à jour

Chaque version mineure 0.x du bundle exige la version mineure correspondante du SDK cœur quiet-metrics/php-metrics : montez les deux ensemble, et eux seuls.

composer require quiet-metrics/symfony-metrics:^0.5 --no-update
composer update quiet-metrics/symfony-metrics quiet-metrics/php-metrics

Un simple composer require échoue, car le SDK cœur est verrouillé dans composer.lock. Le message d'erreur de Composer propose alors -W, qui met à jour toutes les dépendances du projet ; -w monterait aussi des composants Symfony. Lisez le CHANGELOG du paquet avant de monter : il signale les changements dans ce qui est compté.

Configuration

# config/packages/quiet_metrics.yaml
quiet_metrics:
    public_key: '%env(QUIET_METRICS_PUBLIC_KEY)%'   # clé publique du site (obligatoire)
    secret_key: '%env(QUIET_METRICS_SECRET_KEY)%'   # indispensable en envoi serveur : signe chaque envoi (HMAC)

    # endpoint: 'https://quietmetrics.dev/api/v1/collect'  # défaut du SDK cœur
    # auto_pageview: false        # désactive la pageview automatique

Par environnement, surchargez dans config/packages/test/quiet_metrics.yaml ou via les variables d'environnement : sans clé publique valide, rien n'est envoyé.

Pageviews automatiques

Les pages vues automatiques sont les documents HTML/XHTML affichés en réponse à un GET, y compris les erreurs 404/500. Les redirections, réponses vides (204/205), PDF, JSON et pièces jointes sont exclus, ainsi que l’AJAX, les préchargements annoncés et les visiteurs exclus.

À partir de la version 0.4.0, track_404: true active en plus un événement 404 avec le chemin de la page. Cette option est désactivée par défaut : chaque événement supplémentaire consomme le quota. Activez-la côté serveur ou via data-404 dans le script sur une même page, pour éviter un double événement. Le suivi ne voit pas les pages servies par un cache qui contourne PHP.

auto_pageview: false coupe le listener : vous gardez le client pour des envois manuels (sites mixtes, tracking sélectif).

Événements

Injectez QuietMetrics\Tracker, l'interface que le client implémente (service public ; QuietMetrics\Client avant la version 0.5.0) :

use QuietMetrics\Tracker;

final class CheckoutController
{
    public function __construct(private readonly Tracker $quietMetrics) {}

    public function confirm(): Response
    {
        // …
        $this->quietMetrics->event('achat', ['montant' => 49, 'plan' => 'pro']);
    }
}

Depuis une commande console ou un worker Messenger, il n'y a pas de requête courante : passez l'URL explicitement, sinon rien ne part (abandon silencieux) :

$this->quietMetrics->event('import-termine', ['lignes' => 1200], [
    'url' => 'https://monsite.fr/imports',
]);

Cas particuliers

Cache pleine page (Varnish, Cloudflare, cache de réponses…). Une page servie depuis un cache placé devant votre application n'exécute pas PHP : sa visite n'est pas comptée. Laissez ces pages hors du cache, ou ajoutez aussi le script qm.js : les deux mesures cohabitent sans double compte.

FrankenPHP, RoadRunner, workers persistants. Le listener lit l'objet Request de chaque requête, jamais les superglobales. Rien à configurer.

Reverse proxy / CDN. Le listener utilise Request::getClientIp() : configurez framework.trusted_proxies comme d'habitude et l'IP réelle du visiteur suivra. L'option trust_proxy_headers du SDK ne concerne que les usages hors framework.

Ce qui est transmis. À partir de la version 0.5.0, le SDK ne transmet que ce que Quiet Metrics lit : l'adresse de la page réduite à son origine, à son chemin et à ses paramètres de campagne, et le référent réduit à son origine. Détail dans le SDK PHP.

Tests. Remplacez le service QuietMetrics\Tracker par votre propre implémentation pour vérifier vos événements sans réseau. Le client est final : on ne l'étend pas, on remplace l'interface qu'il implémente (version 0.5.0 et suivantes).

# config/services_test.yaml
services:
    QuietMetrics\Tracker:
        class: App\Tests\Double\RecordingTracker

Votre code doit alors typer QuietMetrics\Tracker, comme dans l'exemple des événements.

Contrat de robustesse

Envoi non bloquant (socket fire-and-forget, repli cURL court), échecs silencieux : l'analytics ne casse jamais l'application 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.