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; }