2017年4月21日金曜日

Laravel5.4で、CSVダウンロード

Laravel5.4で、CSVダウンロードです。ストリームのレスポンスを返すようにすると良いらしい。書き方が洗練されている感じがします(笑)。

return response()->stream($callback, 200, $headers);

  public function csvDownload()
  {
    $headers = array(
      "Content-type" => "text/csv",
      "Content-Disposition" => "attachment; filename=file.csv",
      "Pragma" => "no-cache",
      "Cache-Control" => "must-revalidate, post-check=0, pre-check=0",
      "Expires" => "0"
    );

    $callback = function() {
      $handle = fopen('php://output', 'w');

      $columns = [
        'id',
        'name',
        'email',
      ] ;
      mb_convert_variables('SJIS-win', 'UTF-8', $columns);

      fputcsv($handle, $columns);

      $users = User::all();
      foreach ($users as $user) {
        $csv = [
          $user->id,
          $user->name,
          $user->email,
        ] ;
        mb_convert_variables('SJIS-win', 'UTF-8', $csv);
        fputcsv($handle, $csv);
      }

      fclose($handle);
    };

    return response()->stream($callback, 200, $headers);
  }

参考サイト
laravel5.3 CSVダウンロードを実装する(あしたからがんばるさん)
CSV export in laravel 5 controller(Stack Overflow)
Laravel 5.2 Response::stream alternative(LARACASTS)
HTTP Responses(Laravel)

0 件のコメント:

コメントを投稿