迁移Yii2应用至新虚拟机后yii2fullcalendar无法正常渲染
问题:Yii2 fullcalendar组件迁移后渲染异常
环境对比
- 原环境:GoDaddy CentOS VPS,Yii2 2.0.23,philippfrenzel/yii2fullcalendar 3.9.0,PHP 5.6(日历正常渲染)
- 新环境:内部ESXi Ubuntu 22.04虚拟机,Yii2 2.0.47,同版本组件,PHP 5.6(渲染异常)
- 验证环境:Ubuntu 14.04、MacOS Ventura(同组件版本+PHP 5.6,均正常渲染)
渲染效果对比
旧环境正常渲染:
新环境渲染异常:
相关代码
视图代码
<?= \yii2fullcalendar\yii2fullcalendar::widget([ 'events' => $events, 'id' => 'home-calendar', 'clientOptions' => [ 'eventClick' => new JsExpression($js_event_click), ], ]); ?>
控制器代码
$homeEvents = HomeEvent::find()->all(); $events = []; foreach ($homeEvents as $homeEvent) { $event = new Event([ 'id' => $homeEvent->id, 'title' => $homeEvent->title, 'allDay' => ($homeEvent->all_day == "T"), 'start' => $homeEvent->start_dt, 'end' => $homeEvent->end_dt, 'editable' => true, 'className' => ($homeEvent->all_day == 'T') ? 'fc-event-allday' : null, ]); $events[] = $event; } ... return $this->render('homepage', [ 'events' => $events, ... ]);
解决思路
- 检查前端资源加载:打开浏览器开发者工具(F12),查看Console和Network标签,确认fullcalendar的CSS、JS文件是否加载成功,是否有404或加载报错。Ubuntu 22.04的Web服务(Apache/Nginx)配置可能存在静态文件权限问题,或Yii2的assetManager配置差异导致资源路径错误。
- 排查Yii2版本差异:从2.0.23升级到2.0.47,assetManager的行为可能变化。检查新环境
config/web.php中的assetManager配置,可临时开启forceCopy测试:'assetManager' => [ 'forceCopy' => true, ], - 验证日期格式一致性:打印控制器中
$events的JSON输出,对比新旧环境的日期格式是否一致(如是否为ISO8601格式),时区配置差异也可能导致事件渲染异常。 - 排查前端JS错误:简化
clientOptions,先移除eventClick配置,看日历是否能正常渲染;同时检查Console中的JS报错,确认是否存在JsExpression解析或fullcalendar初始化问题。 - 核对组件依赖:检查fullcalendar核心版本、jQuery版本在新旧环境是否一致,Yii2新版本可能引入了不同的jQuery版本,存在兼容性冲突。
- 检查文件权限:确认新环境
@webroot/assets目录权限正确,PHP进程拥有读写权限,保证Yii2能正常发布组件静态资源。
内容的提问来源于stack exchange,提问作者Papa Joe Dee
相关产品推荐
相关产品推荐

