如何为symfony/ux-chartjs添加ChartJS DateTime适配器?
解决Symfony UX ChartJS添加日期时间适配器的问题
当使用Symfony UX ChartJS且坐标轴设置为时间单位时,由于ChartJS 3+默认不含日期适配器,会出现错误:
This method is not implemented: Check that a complete date adapter is provided.
直接在app.js引入chartjs-adapter-moment会导致适配器注册到全局node_modules里的ChartJS副本,而Symfony UX使用的是自身vendor/symfony/ux-chartjs/assets/node_modules/chart.js下的实例,因此需要通过以下方式正确注册:
步骤1:安装依赖包
先安装适配器及依赖的moment库:
npm install chartjs-adapter-moment moment --save-dev
步骤2:注册适配器到UX的ChartJS实例
有两种方式实现:
方式一:通过controllers.json全局配置
修改assets/controllers.json,找到Symfony\\UX\\Chartjs\\Controller\\ChartController的配置项,添加导入和初始化逻辑:
{ "Symfony\\UX\\Chartjs\\Controller\\ChartController": { "imports": [ "chartjs-adapter-moment" ], "initialize": "async (controller) => { const { Chart } = await import('@symfony/ux-chartjs/chartjs'); import('chartjs-adapter-moment').then((adapter) => { Chart.register(adapter.default); }); }" } }
方式二:自定义Stimulus控制器扩展
创建assets/controllers/chartjs.custom.js文件,内容如下:
import { Chart } from '@symfony/ux-chartjs/chartjs'; import adapter from 'chartjs-adapter-moment'; // 注册适配器到UX使用的Chart实例 Chart.register(adapter); export default class extends Controller {}
然后在assets/controllers.json中让UX的Chart控制器继承这个自定义控制器:
{ "Symfony\\UX\\Chartjs\\Controller\\ChartController": { "extends": "./chartjs.custom.js" } }
步骤3:更新前端资源并清除缓存
执行以下命令确保配置生效:
php bin/console cache:clear npm run build
内容的提问来源于stack exchange,提问作者Joyce Babu
相关产品推荐
相关产品推荐

