我有DynaGrid和ExportMenu的几个观点。我每天都需要将所有导出保存为CSV文件。我不知道,如何从控制器开始一个新的导出(在DynaGrid中定义)。
我找到了以下可能的解决方案,但它们都不是最佳解决方案:
请参阅:
<?= echo yii\helpers\Html::a('Export', ['controller/action'], [
'class'=>'classname',
'data'=>[
'method'=>'post',
'params'=>[
'export_type'=>'CSV',
'exportFull_w0' => '1',
'export_columns' => '0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20',
'column_selector_enabled' => '1'
],
]
]) ?>
有更简单的事情吗?我需要扩展程序UploadFromUrl,它可以下载文件,如下所示:
$url = 'http://static.yiiframework.com/files/logo/yii.png' ;
$path = 'uploads/yii.png';
$file = UploadFromUrl::initWithUrl($url);
$file->saveAs($path);
但它无法使用当前Yii应用程序中的post参数和url。
答案 0 :(得分:2)
我没有亲自使用DynaGrid,但是我使用这个lib https://github.com/arogachev/yii2-excel编写了一些导出 - 这样我可以自定义我的大部分导出功能。您还可以编写自定义SQL,您可以轻松更改,假设您的导出更改而不影响DynaGrid。希望这是有帮助的。
答案 1 :(得分:0)
最后我使用了以下解决方案。
在Dynagrid中将stream参数设置为false:
'gridOptions' => [
...
'toolbar' => [
...
\kartik\export\ExportMenu::widget([
...
'stream' => false,
'folder' => '@webroot/export',
]);
],
],
如果流设置为false,则导出的文件将保存在目录“文件夹”中。
在 web 控制器中定义一个新操作,该操作将使用Dynagrid保存导出数据:
public function actionExport()
{
$_POST['export_type'] = 'CSV';
$_POST['exportFull_w0'] = '1';
$_POST['export_columns'] = '0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15';
$_POST['column_selector_enabled'] = '1';
Yii::$app->runAction('controller/data');
return true;
}
可以从控制台到cURL启动“导出”操作,如以下答案中所述:Yii2: Run a web action in a console controller