Utilisation de Symfony UX
Utiliser un composant Symfony UX pour créer des graphiques avec ux-chartjs

Notions théoriques
Qu'est-ce que ux-chartjs ?
symfony/ux-chartjs est un composant officiel de Symfony UX qui permet de créer des graphiques interactifs dans une application Symfony, en écrivant uniquement du code PHP et Twig. Il encapsule la bibliothèque JavaScript Chart.js — l'une des plus populaires au monde pour la visualisation de données — et l'expose via une API PHP simple et cohérente avec l'écosystème Symfony.
Sans ux-chartjs, intégrer Chart.js dans une application Symfony nécessiterait d'écrire manuellement du JavaScript, de gérer les données côté client, et de maintenir une synchronisation entre le backend PHP et le frontend JS. Avec ux-chartjs, tout se fait côté PHP : les données, le type de graphique, les couleurs, les options — et Chart.js s'occupe du rendu automatiquement dans le navigateur.
Les types de graphiques disponibles
Chart.js, et donc ux-chartjs, supporte plusieurs types de graphiques, tous accessibles via des constantes PHP :
| Constante PHP | Type de graphique |
|---|---|
Chart::TYPE_BAR | Barres verticales |
Chart::TYPE_LINE | Courbes / lignes |
Chart::TYPE_PIE | Camembert |
Chart::TYPE_DOUGHNUT | Anneau |
Chart::TYPE_RADAR | Radar |
Chart::TYPE_POLAR_AREA | Aires polaires |
Chart::TYPE_BUBBLE | Bulles |
Chart::TYPE_SCATTER | Nuage de points |
Pour une première utilisation, les types BAR (barres) et LINE (courbes) sont les plus simples à comprendre et à configurer. Ce sont aussi les plus courants dans les applications de gestion.
La structure des données d'un graphique
La structure des données d'un graphique Chart.js
Tout graphique Chart.js repose sur une structure de données précise. En PHP avec ux-chartjs, cette structure se construit via les méthodes setData() et setOptions() de l'objet Chart.
Les données (setData) se composent de :
labels: un tableau de chaînes de caractères qui constituent les étiquettes de l'axe X (ou les légendes pour un camembert). Exemple :['Janvier', 'Février', 'Mars']datasets: un tableau de jeux de données. Chaque dataset représente une série de valeurs à afficher. Un graphique peut en avoir plusieurs (exemple : ventes 2023 et ventes 2024 superposées).
Chaque dataset contient :
[
'label' => 'Ventes 2024', // Légende de la série
'data' => [120, 85, 200, 160], // Valeurs numériques
'backgroundColor' => 'rgba(54, 162, 235, 0.5)', // Couleur de fond
'borderColor' => 'rgb(54, 162, 235)', // Couleur de bordure
'borderWidth' => 1, // Épaisseur de bordure
]
Les couleurs dans Chart.js s'expriment en rgba (rouge, vert, bleu, opacité) ou en rgb. L'opacité (dernier paramètre de rgba) va de 0 (transparent) à 1 (opaque). Pour les barres, une opacité de 0.5 à 0.8 est souvent esthétique.
Les options de configuration
Les options de configuration avec
setOptions
La méthode setOptions() permet de personnaliser le comportement et l'apparence du graphique. Elle accepte un tableau PHP qui correspond aux options Chart.js :
$chart->setOptions([
'scales' => [
'y' => [
'beginAtZero' => true, // L'axe Y commence à 0
],
],
'plugins' => [
'legend' => [
'position' => 'top', // Position de la légende
],
'title' => [
'display' => true,
'text' => 'Titre du graphique',
],
],
'responsive' => true, // Le graphique s'adapte à la taille du conteneur
]);
Toutes les options disponibles dans Chart.js sont utilisables dans setOptions(). La documentation officielle de Chart.js (https://www.chartjs.org/docs/latest/) liste l'intégralité des options par type de graphique.
Le flux complet : de PHP au navigateur
Voici comment ux-chartjs fonctionne en coulisses, de la création du graphique en PHP jusqu'à son affichage dans le navigateur :
1. Dans le contrôleur PHP
On injecte ChartBuilderInterface et on crée un objet Chart avec ses données et ses options.
2. Dans le template Twig
On appelle la fonction render_chart(chart) qui génère une balise <canvas> HTML avec les données sérialisées en JSON dans un attribut data-*.
3. Dans le navigateur
Stimulus détecte la balise <canvas> via l'attribut data-controller, lit les données JSON, et instancie Chart.js pour afficher le graphique interactif.
PHP (ChartBuilder)
→ Objet Chart (données + options)
→ Twig render_chart()
→ HTML <canvas data-*="...JSON...">
→ Stimulus controller.js
→ Chart.js (rendu visuel)
Pour que render_chart() soit disponible dans Twig, le composant symfony/ux-chartjs doit être installé et la balise {{ importmap('app') }} doit être présente dans base.html.twig. Sans cette balise, le contrôleur Stimulus ne se charge pas et le graphique n'apparaît pas.