0

ユーザーがレポート出力として選択したものに応じて、その場で CSV ファイルを生成しようとしています。データの取得と CakeResponse を使用したファイルへの書き込みは完了しましたが、ファイル拡張子を「.csv」に設定するのに苦労しています。ファイルは通常のテキスト ファイルとしてダウンロードされます。CakePHP のドキュメントでは、これを行うことを提案しています。

$this->response->type('csv');

..しかし、これでも機能しません。まだテキスト ファイルを取得しています。誰でも光を当てることができますか?CSV ファイルを生成する新しい方法を探しているわけではありません。拡張子を変更したいだけです。ありがとうございました。

これは私がファイルをダウンロードする方法です:

$this->response->body($this->constructFileBody($logs));

    return $this->response;

これはメソッド「constructFileBody」ですが、この質問の範囲を超えていると思います:

public function constructFileBody($logs = array()){

    $content = "";
    for($i = 0; $i < count($logs); $i++){

        $row = $logs[$i]['EventLog'];
        $line = $row['description'] . "," . $row['user'] . "," .  $row['affected_user'] . "," . $row['report_title'] . "," . $row['date_created'] . "\n";

        $content = $content . $line;
    }

    return $content;

}
4

1 に答える 1

1

あなたのコードを見たので、ヘッダーをどこでも使用したとは思わないので、次のコードを試してください。

//create a file
$filename = "export_".date("Y.m.d").".csv";
$csv_file = fopen('php://output', 'w');

header('Content-type: application/csv');
header('Content-Disposition: attachment; filename="'.$filename.'"');

$results = $this->ModelName->query($sql);   // This is your sql query to pull that data you need exported
//or
$results = $this->ModelName->find('all', array());

// The column headings of your .csv file
$header_row = array("ID", "Received", "Status", "Content", "Name", "Email", "Source", "Created");//columns you want in csv file
fputcsv($csv_file,$header_row,',','"');  

// Each iteration of this while loop will be a row in your .csv file where each field corresponds to the heading of the column
foreach($results as $result)
{
// Array indexes correspond to the field names in your db table(s)
$row = array(
    $result['ModelName']['id'],
    $result['ModelName']['received'],
    $result['ModelName']['status'],
    $result['ModelName']['content'],
    $result['ModelName']['name'],
    $result['ModelName']['email'],
    $result['ModelName']['source'],
    $result['ModelName']['created']
);

fputcsv($csv_file,$row,',','"');
}

fclose($csv_file); 

次に、コードを見て、置き換える必要があるコード行を取得します。

于 2013-06-26T14:08:09.273 に答える