运行 Yii2 kartik 导出扩展时出现问题
Problems while running Yii2 kartik Export Extension
我是 Yii 的新手,我正在开发一个从 MySQL 读取表格的数据库应用程序。我需要用户能够将数据导出为 CSV 或 PDF,所以我下载了 Kartik Yii2 Export Extension。我不知道如何将我的设置配置为 运行 这个扩展,我阅读了指南但我不明白如何修复这个错误:
无效配置 – yii\base\InvalidConfigException
"query" 属性 必须是实现 QueryInterface 的 class 的实例,例如yii\db\Query 或其子classes.
这是我的代码:
Models/industrial.php:
<?php
namespace app\models;
use yii\db\ActiveRecord;
class Industrial extends ActiveRecord
{
}
controller/IndustrialController.php:
<?php
namespace app\controllers;
use yii\web\Controller;
use yii\data\Pagination;
use app\models\industrial;
use yii\data\ActiveDataProvider;
class IndustrialController extends Controller
{
public function actionIndex()
{
$dataProvider=new ActiveDataProvider('Industrial', array(
'pagination'=>array(
'pageSize'=>20,
),
));
$query = industrial::find();
$pagination = new Pagination([
'defaultPageSize' => 20,
'totalCount' => $query->count(),
]);
$industrials = $query->orderBy('Company_Name')
->offset($pagination->offset)
->limit($pagination->limit)
->all();
return $this->render('index', [
'industrials' => $industrials,
'pagination' => $pagination,
'dataProvider'=>$dataProvider,
]);
}
}
views/industrial/index.php:
<?php
use yii\helpers\Html;
use yii\widgets\LinkPager;
?>
<h1>Industrial Companies</h1>
<ul>
<?php
use kartik\export\ExportMenu;
use kartik\grid\GridView;
$gridColumns = [
['class' => 'yii\grid\SerialColumn'],
'id',
'name',
[
'attribute'=>'Name',
'label'=>'Name',
'vAlign'=>'middle',
'width'=>'190px',
'value'=>function ($model, $key, $index, $widget) {
return Html::a($model->Name, '#', []);
},
'format'=>'raw'
],
'Name',
'Location',
'Telephone',
];
echo ExportMenu::widget([
'dataProvider' => $dataProvider,
'columns' => $gridColumns,
'fontAwesome' => true,
'dropdownOptions' => [
'label' => 'Export All',
'class' => 'btn btn-default'
]
]) . "<hr>\n".
GridView::widget([
'dataProvider' => $dataProvider,
'columns' => $gridColumns,
'export' => [
'fontAwesome' => true,
]
]);
$array = (array) $industrials;
function build_table($array){
// start table
$html = '<table class="altrowstable" id="alternatecolor">';
// header row
$html .= '<tr>';
foreach($array[0] as $key=>$value){
$html .= '<th>' . $key . '</th>';
}
$html .= '</tr>';
// data rows
foreach( $array as $key=>$value){
$html .= '<tr>';
foreach($value as $key2=>$value2){
$html .= '<td>' . $value2 . '</td>';
}
$html .= '</tr>';
}
// finish table and return it
$html .= '</table>';
return $html;
}
echo build_table($array);
?>
<?= LinkPager::widget(['pagination' => $pagination]) ?>
请帮助我。
好像有错误码
你应该写:
$ query = Industrial :: find ();
而不是
$ query = industrial :: find ();
工业用 class 以大写开头
在您的 activeDataProvider 配置中
我看到没有为键 'query' 赋值,如下所示
$ dataProvider = new ActiveDataProvider ([
'query' => Post :: find (),
'pagination' => [
'pageSize' => 20,
],
]);
使用以下内容进行测试
actionIndex public function ()
{
$ dataProvider = new ActiveDataProvider ('Industrial', array (
'query' => Industrial :: find (),
'pagination' => array (
'pageSize' => 20,
),
));
在 Yii2 文件夹的 config/web.php components 下添加这个,它会起作用
'modules' => [
'gridview' => [
'class' => '\kartik\grid\Module',
],
],
我是 Yii 的新手,我正在开发一个从 MySQL 读取表格的数据库应用程序。我需要用户能够将数据导出为 CSV 或 PDF,所以我下载了 Kartik Yii2 Export Extension。我不知道如何将我的设置配置为 运行 这个扩展,我阅读了指南但我不明白如何修复这个错误:
无效配置 – yii\base\InvalidConfigException "query" 属性 必须是实现 QueryInterface 的 class 的实例,例如yii\db\Query 或其子classes.
这是我的代码:
Models/industrial.php:
<?php
namespace app\models;
use yii\db\ActiveRecord;
class Industrial extends ActiveRecord
{
}
controller/IndustrialController.php:
<?php
namespace app\controllers;
use yii\web\Controller;
use yii\data\Pagination;
use app\models\industrial;
use yii\data\ActiveDataProvider;
class IndustrialController extends Controller
{
public function actionIndex()
{
$dataProvider=new ActiveDataProvider('Industrial', array(
'pagination'=>array(
'pageSize'=>20,
),
));
$query = industrial::find();
$pagination = new Pagination([
'defaultPageSize' => 20,
'totalCount' => $query->count(),
]);
$industrials = $query->orderBy('Company_Name')
->offset($pagination->offset)
->limit($pagination->limit)
->all();
return $this->render('index', [
'industrials' => $industrials,
'pagination' => $pagination,
'dataProvider'=>$dataProvider,
]);
}
}
views/industrial/index.php:
<?php
use yii\helpers\Html;
use yii\widgets\LinkPager;
?>
<h1>Industrial Companies</h1>
<ul>
<?php
use kartik\export\ExportMenu;
use kartik\grid\GridView;
$gridColumns = [
['class' => 'yii\grid\SerialColumn'],
'id',
'name',
[
'attribute'=>'Name',
'label'=>'Name',
'vAlign'=>'middle',
'width'=>'190px',
'value'=>function ($model, $key, $index, $widget) {
return Html::a($model->Name, '#', []);
},
'format'=>'raw'
],
'Name',
'Location',
'Telephone',
];
echo ExportMenu::widget([
'dataProvider' => $dataProvider,
'columns' => $gridColumns,
'fontAwesome' => true,
'dropdownOptions' => [
'label' => 'Export All',
'class' => 'btn btn-default'
]
]) . "<hr>\n".
GridView::widget([
'dataProvider' => $dataProvider,
'columns' => $gridColumns,
'export' => [
'fontAwesome' => true,
]
]);
$array = (array) $industrials;
function build_table($array){
// start table
$html = '<table class="altrowstable" id="alternatecolor">';
// header row
$html .= '<tr>';
foreach($array[0] as $key=>$value){
$html .= '<th>' . $key . '</th>';
}
$html .= '</tr>';
// data rows
foreach( $array as $key=>$value){
$html .= '<tr>';
foreach($value as $key2=>$value2){
$html .= '<td>' . $value2 . '</td>';
}
$html .= '</tr>';
}
// finish table and return it
$html .= '</table>';
return $html;
}
echo build_table($array);
?>
<?= LinkPager::widget(['pagination' => $pagination]) ?>
请帮助我。
好像有错误码 你应该写:
$ query = Industrial :: find ();
而不是
$ query = industrial :: find ();
工业用 class 以大写开头
在您的 activeDataProvider 配置中
我看到没有为键 'query' 赋值,如下所示
$ dataProvider = new ActiveDataProvider ([
'query' => Post :: find (),
'pagination' => [
'pageSize' => 20,
],
]);
使用以下内容进行测试
actionIndex public function ()
{
$ dataProvider = new ActiveDataProvider ('Industrial', array (
'query' => Industrial :: find (),
'pagination' => array (
'pageSize' => 20,
),
));
在 Yii2 文件夹的 config/web.php components 下添加这个,它会起作用
'modules' => [
'gridview' => [
'class' => '\kartik\grid\Module',
],
],