システム開発を行っているとよくあるのがCSVダウンロード。
エンジニアの方は覚えておかなと行けないものですね。
今回はそんなCSVダウンロードをLaravelで行う方法をご紹介したいと思います。
なお、本記事では、
- Laravel5.7での実装(5.3~であれば同様の手順で実装できると思います)
- とりあえずはCSV取得するURLに直アクセス
といった感じで紹介いたします。
その為、適時実装する環境に読み替えてコピペ頂ければと思います。
このブログは現役のエンジニア(プログラマー歴が約12年)の僕(よしたか)が2019年12月後半から日々更新しております。
もしもアフィリエイトは会員登録後も無料です!
今すぐ会員登録してアフィリエイトを始めよう!
LaravelでCSVダウンロードする方法
では早速LaravelでCSVダウンロードする方法を見ていきます。
routes/web.php
Route::get('download', 'CsvController@download')->name('download.index');
まずは、GETでCSV取得できるルーティングの設定を行います。
app/Http/Controllers/CsvController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\StreamedResponse;
class CsvController extends Controller
{
/**
* Export Sample List with csv
* @return Symfony\Component\HttpFoundation\StreamedResponse
*/
public function download( Request $request )
{
$cvsList = [
['タイトル', '本文', '名前']
, ['テストタイトル1', 'テスト本文1', 'テスト1']
, ['テストタイトル2', 'テスト本文2', 'テスト2']
];
$response = new StreamedResponse (function() use ($request, $cvsList){
$stream = fopen('php://output', 'w');
// 文字化け回避
stream_filter_prepend($stream,'convert.iconv.utf-8/cp932//TRANSLIT');
// CSVデータ
foreach($cvsList as $key => $value) {
fputcsv($stream, $value);
}
fclose($stream);
});
$response->headers->set('Content-Type', 'application/octet-stream');
$response->headers->set('Content-Disposition', 'attachment; filename="sample.csv"');
return $response;
}
}
こちらで実際にCSV出力を行う処理を書きます。
「$cvsList」個所にCSVを出力する内容を記載しているので、ここは適時データベースから値を取得するなりして読み替えてもらえればと思います。
まとめ
いかがだったでしょうか。
今日はLaravelで簡単にCSVダウンロードする方法を紹介いたしました。ほんとひと昔前まではゴリゴリ書かないといけませんでしたが、便利な世の中になったものです…。
今回はこれでサクッと終了です。