ux chart.js 在 symfony 1.6+ 中已废弃,官方不再维护;应直接集成原生 chart.js v4+,通过 npm install chart.js、import chart from 'chart.js/auto'、在 twig 中使用 canvas 标签并用 js 初始化图表。

UX Chart.js 在 Symfony 1.6+ 中已废弃,官方明确不再维护 —— 别再试图安装 @symfony/ux-chartjs,它不会正常工作。
为什么 @symfony/ux-chartjs 安装后图表不渲染
该包在 Symfony UX 2.0 后被标记为 abandoned,其依赖的 chart.js 版本锁死在 v3.x,且未适配 Webpack Encore v2+ 的模块解析逻辑。常见现象包括:
-
ReferenceError: Chart is not defined(即使已 import) - 控制台报
Failed to resolve module或Cannot find module 'chart.js/auto' - Twig 中使用
{{ chartjs_chart(...) }}渲染空白,无 JS 错误但 canvas 不初始化
推荐替代方案:直接集成原生 Chart.js(v4+)
绕过 UX 包,用最简路径接入最新 Chart.js,兼容 Symfony 6/7 + Encore v2/v3:
- 运行
npm install chart.js(不要加--save-dev) - 在你的 JS 入口(如
assets/app.js)中添加:import Chart from 'chart.js/auto';
- 确保 Encore 启用
enableSassLoader()或enablePostCssLoader()(Chart.js v4 默认需要 CSS 支持 tooltip 样式) - 在 Twig 模板中放一个带 id 的
<canvas id="myChart"></canvas>,然后在 JS 中初始化:const ctx = document.getElementById('myChart').getContext('2d');<br>new Chart(ctx, { type: 'bar', data: { labels: ['A', 'B'], datasets: [{ data: [10, 20] }] });
如果必须复用旧 UX Chart.js 模板逻辑
你有存量 Twig 调用 {{ chartjs_chart(...) }},又不想重写模板?可临时桥接:
- 保留旧 PHP 逻辑生成数据数组(如
$chartData),但改用json_encode($chartData, JSON_UNESCAPED_UNICODE)输出到页面 - 在 Twig 中用
data-chart-config="{{ chartData|raw }}"挂载到 canvas 上 - JS 端统一读取:
const config = JSON.parse(canvas.dataset.chartConfig);<br>new Chart(ctx, config);
- 注意:旧 UX 的
chartjs_chart()函数依赖Symfony\UX\Chartjs\Chart类,它只生成配置数组,不处理渲染 —— 渲染必须由前端 Chart.js 实例完成
真正卡点不在 PHP 层,而在 JS 加载时序和模块解析。多数失败是因为 Chart 对象没挂到全局、或 canvas DOM 尚未就绪就执行 new Chart()。别纠结 UX 包,直接管好 import 位置和 DOMContentLoaded 时机就行。











