Laravel csvファイルをzip形式でダウンロードする。

1   2   3
一 二 三

というcsvファイルを作成して、 なおかつそれをzip形式でダウンロードさせたい場合、以下のように書ける。

use File;
use ZipArchive;
...
$header = [];  // csvヘッダー部分
array_push($header, "1");
array_push($header, "2");
array_push($header, "3");

$body = []; // csvボディ部分
array_push($body, "一");
array_push($body, "二");
array_push($body, "三");

$zip = new ZipArchive;

$zipFileName = "xxx.zip";  
$csvFileName = "xxx.csv";

$csvFilePath = public_path($csvFileName);  // 作成したいcsvファイルのフルパスを用意する
$csvFile = fopen($csvFilePath, 'w');  // 用意したフルパスにcsvファイルを作成
fputcsv($csvFile, $header);  // ヘッダー部分をcsvファイルに書き込む
fputcsv($csvFile, $body); // ボディ部分をcsvファイルに書き込む

if($zip->open($csvFilePath, ¥ZipArchive::CREATE | ¥ZipArchive::OVERWRITE) === TRUE){  // csvファイルを置いたところにzipファイルも置く
     $zip->addFile($csvFilePath, $csvFileName);  // zipファイルに、csvファイルを追加する
}
$zip->close();

return response()->download(public_path($zipFileName));  // zipファイルをダウンロードする