首页 > 解决方案 > 如何使用 Yii 1.1 框架通过 PHP 下载过滤后的 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'];
            }
    }
  }
}

我很感激你能给我的任何帮助和/或解释。我当然更愿意了解我做错了什么,以便在未来学习更多并成为更好的程序员。

非常感谢你们的帮助。

亲切的问候。

标签: phpcsvyiiyii1.x

解决方案


不用管大家。

我编辑了搜索功能,以便在创建 CSV 文件之前对其进行过滤。


推荐阅读