如何使用 Yii 1.1 框架下载 PHP 过滤后的 CSV 文件
How to download a filtered CSV file with PHP using Yii 1.1 framework
在您进一步阅读之前,如果我在此处复制,我深表歉意。我已经环顾四周很长一段时间了,对于如何处理以下情况一无所知。由于我是一名新手程序员,整个事情变得越来越糟。
情况
我的高级程序员给我的任务是创建一个可以生成 CSV 文件的函数。我遇到了一些麻烦,但最终还是解决了。该函数(位于模型中)如下所示。
// The function below will return a CSV file.
public function convert2CSV(){
$data = $this->search()->rawData;
$fileOpener = fopen('php://output', 'w');
fputcsv($fileOpener, array(
'some code...'
), ';');
foreach ($data as $rows) {
fputcsv($fileOpener, $rows ';');
}
fclose($fileOpener);
}
到目前为止一切顺利。现在我的任务是创建一个过滤器,该过滤器也将应用于 CSV 文件。这是什么意思?嗯,我在网站上使用过滤器,然后导出 CSV 文件,它应该只下载过滤器的结果。到目前为止,无论我做什么,它都只是下载了它能下载的所有内容,直到达到最大计数。
我试图通过使用 $_GET 以某种方式告诉上面的 CSV 函数只下载过滤后的结果来完成它。我一直在尝试在控制器中这样做,在调用模型的 CSV 函数的操作中。
public function actionExport2CSV() {
$a = new A();
$b = new B();
// This part will output the headers so that the file is downloaded rather than displayed
header('Content-type: text/csv');
header('Content-Disposition: attachment; filename=TestFile.csv');
// do not cache the file
header('Pragma: no-cache');
header('Expires: 0');
$a->convert2CSV(); {
if (isset($_GET['B'])) {
$b->attributes = $_GET['B'];
}
}
}
}
感谢您能给我的任何帮助 and/or 解释。我当然更愿意了解我做错了什么,以便将来学习更多并成为更好的程序员。
非常感谢你们的帮助。
亲切的问候。
我用的是EExcelview扩展,很有用。
- 下载并解压
/protected/extensions/
中的代码
- 将其添加到您的
/protected/config/main.php
文件中,如下所示
'import' => array(
'app.models.*',
'app.portlets.*',
'app.components.*',
'app.extensions.*',
...
'ext.phpexcel.*', # here we are importing the extension
),
- 在要下载 CSV 文件的视图中添加和优化代码,如下所示:
$this->widget('EExcelView', array(
'dataProvider' => $model->search(),
'creator' => Yii::app()->name,
'grid_mode' => 'grid',
'title' => 'CSV File title',
'subject' => 'CSV File Subject',
'description' => 'CSV File Description',
'exportText' => 'Download file ',
'filename' => urlencode('My file to download'),
'exportType' => 'CSV', # Available Options => Excel5, Excel2007, PDF, HTML, CSV
'template' => "{exportbuttons}",
'columns' => array(
'colA',
'colB'
...
),
));
大家别介意。
我编辑了搜索功能,以便在创建 CSV 文件之前对其进行过滤。
在您进一步阅读之前,如果我在此处复制,我深表歉意。我已经环顾四周很长一段时间了,对于如何处理以下情况一无所知。由于我是一名新手程序员,整个事情变得越来越糟。
情况
我的高级程序员给我的任务是创建一个可以生成 CSV 文件的函数。我遇到了一些麻烦,但最终还是解决了。该函数(位于模型中)如下所示。
// The function below will return a CSV file.
public function convert2CSV(){
$data = $this->search()->rawData;
$fileOpener = fopen('php://output', 'w');
fputcsv($fileOpener, array(
'some code...'
), ';');
foreach ($data as $rows) {
fputcsv($fileOpener, $rows ';');
}
fclose($fileOpener);
}
到目前为止一切顺利。现在我的任务是创建一个过滤器,该过滤器也将应用于 CSV 文件。这是什么意思?嗯,我在网站上使用过滤器,然后导出 CSV 文件,它应该只下载过滤器的结果。到目前为止,无论我做什么,它都只是下载了它能下载的所有内容,直到达到最大计数。
我试图通过使用 $_GET 以某种方式告诉上面的 CSV 函数只下载过滤后的结果来完成它。我一直在尝试在控制器中这样做,在调用模型的 CSV 函数的操作中。
public function actionExport2CSV() {
$a = new A();
$b = new B();
// This part will output the headers so that the file is downloaded rather than displayed
header('Content-type: text/csv');
header('Content-Disposition: attachment; filename=TestFile.csv');
// do not cache the file
header('Pragma: no-cache');
header('Expires: 0');
$a->convert2CSV(); {
if (isset($_GET['B'])) {
$b->attributes = $_GET['B'];
}
}
}
}
感谢您能给我的任何帮助 and/or 解释。我当然更愿意了解我做错了什么,以便将来学习更多并成为更好的程序员。
非常感谢你们的帮助。
亲切的问候。
我用的是EExcelview扩展,很有用。
- 下载并解压
/protected/extensions/
中的代码
- 将其添加到您的
/protected/config/main.php
文件中,如下所示
'import' => array(
'app.models.*',
'app.portlets.*',
'app.components.*',
'app.extensions.*',
...
'ext.phpexcel.*', # here we are importing the extension
),
- 在要下载 CSV 文件的视图中添加和优化代码,如下所示:
$this->widget('EExcelView', array(
'dataProvider' => $model->search(),
'creator' => Yii::app()->name,
'grid_mode' => 'grid',
'title' => 'CSV File title',
'subject' => 'CSV File Subject',
'description' => 'CSV File Description',
'exportText' => 'Download file ',
'filename' => urlencode('My file to download'),
'exportType' => 'CSV', # Available Options => Excel5, Excel2007, PDF, HTML, CSV
'template' => "{exportbuttons}",
'columns' => array(
'colA',
'colB'
...
),
));
大家别介意。
我编辑了搜索功能,以便在创建 CSV 文件之前对其进行过滤。