'出口' csv数据出现在我的Firefox控制台日志中,而不是导出的.csv文件(Yii 1.x)

时间:2015-08-12 12:12:01

标签: php csv yii http-headers export-to-csv

我有一个表单,一旦提交,就会从我的数据库中提取一些我试图立即下载到csv文档中的数据。

出于某种原因,数据一切正常,采用正确的csv格式,但它只出现在我的Firefox浏览器的控制台日志中,而不是自动下载的文件,例如exported.csv

我有以下功能 - 我没有错误,因为一切正常,但由于某种原因它不会自动下载csv ..我认为我的问题在我的outputCsv函数内。

有什么想法吗?

public function actionSurveyStats()
{
    $id = Yii::app()->getRequest()->getQuery('id');
    $model = SurveyQuestionnaires::model()->findByPK($id);

    $this->bodyTitle = 'Your Survey';

    if (isset($_POST[get_class($model)])) {
        set_time_limit(0);
        ini_set('memory_limit', '786M');
        $filename = 'questionnaire_' .time(). '.csv';
        $completed->questionnaire_id = Yii::app()->request->getPost('questionnaire_id');
        $organisation_id = $_POST[get_class($model)]['organisation_id'];
        $this->outputCsv($model->getExportData($organisation_id), $filename);
    }

    $this->render('survey_stats',array(
        'model' => $model,
    ));
}


protected function outputCsv($rows, $filename = '') {
    if (empty($filename)) {
        $filename = (!is_null($this->model)) ? (strtolower(get_class($this->model)."_".$this->model->getPrimaryKey().".csv")) : "export.csv";
    }

    header('Content-Description: File Transfer');
    header("Content-Type: application/csv") ;
    header("Content-Disposition: attachment; filename=$filename");
    header("Pragma: no-cache");
    header("Cache-control: private");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");

    $fp = fopen('php://output', 'w');
    foreach($rows as $row) {
        fputcsv($fp, $row);
    }

    echo stream_get_contents($fp);
    fclose($fp);

    app()->end();
}

1 个答案:

答案 0 :(得分:0)

我的修复...是表单中的ajax ..将此设置为false&它现在有效!谢谢Yogesh

只需设置' enableAjaxValidation'为假。

<?php $form=$this->beginWidget('bootstrap.widgets.TbActiveForm',array(
'id'                    => get_class($model),
'type'                  => 'horizontal',
'enableAjaxValidation'  => false,
'clientOptions'         => array(
    'validateOnSubmit'      => true,
    'validateOnChange'      => false,
    'validateOnType'        => false,
),
'htmlOptions'       => array(
    'class'                 => '',
    'autocomplete'          => 'off',
    'enctype'               => 'multipart/form-data'
),
)); ?>