Laravelで超簡単にCSVダウンロードする方法【コピペOKです】

Laravelで超簡単にCSVダウンロードする方法【コピペOKです】プログラミング
Laravelで超簡単にCSVダウンロードする方法【コピペOKです】

システム開発を行っているとよくあるのが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ダウンロードは超簡単

いかがだったでしょうか。

今日はLaravelで簡単にCSVダウンロードする方法を紹介いたしました。ほんとひと昔前まではゴリゴリ書かないといけませんでしたが、便利な世の中になったものです…。

今回はこれでサクッと終了です。