Yii的Model是自带Label的,显示表格时会自动从Model中获取Label并显示,可是在导出到文件时,却并不能自动获取Label,通过跟踪发现,问题出在以下代码:php
public function initExport() { ...... $this->setDefaultStyles('header'); $this->setDefaultStyles('box'); $this->filterModel = null; $this->setDefaultExportConfig(); ...... }
注意到这里有个$this->filterModel = null,这就致使后面想根据filterModel获取字段标题的时候,就没有办法获得了。yii
修改方案,首先从Kartik Export继承一个子类,而后在子类重载initExport和getColumnHeader接口,代码以下:ide
public function initExport() { // 这样处理,使得列标题能够跟grid同样,从filterModel中获取 $filterModel = $this->filterModel; parent::initExport(); $this->filterModel = $filterModel; } /** 经过filterModel的属性,得到字段的标题文字 * @param \yii\grid\DataColumn $col * @return string */ public function getColumnHeader($col) { $label = parent::getColumnHeader($col); if ($col->label === null) { if ($this->filterModel !== null && $this->filterModel instanceof Model) { $label = $this->filterModel->getAttributeLabel($col->attribute); } } return $label; }