【PHP/Laravel】CSV出力を簡単に試す場合

https://himaise.com/php/

csv出力する。例なので出力する値は直書きしてある。
Controller側はメソッド分けてあげたり、諸々改良の余地あり。環境によっても書き方変わる。
*csv機能はページ単体で使用という訳では無いので、汎用的な書き方が望ましい。今回の例だと汎用性に乏しいので、あくまでcsvを試すに止める。

blade.php

<div class="csv-area">
  <form action="/postcsv" method="post">
    @csrf
    <button type="submit">エクスポート</button>
  </form>
</div>

Controller

public function postCsv()
{
  //データ準備
  $data = [
    ['id' => 1, 'name' => 'hoge'],
    ['id' => 2, 'name' => 'hogehoge']
  ];
  //カラム作成
 $column = ['ID','名前'];
  //書込用ファイル開く
  $f = fopen('hoge.csv','w');
  if ($f) {
    //カラムの書込
    mb_convert_variables('SJIS','UTF-8',$column);
    fputcsv($f,$column);
    //データの書込
    foreach($data as $v){
      mb_convert_variables('SJIS','UTF-8',$v);
      fputcsv($f,$v); 
    }
  }
  //ファイルを閉じる
  fclose($f);
  //HTTPヘッダ
  header('Content-Type: application/octet-stream');
  header('Content-Length: '.filesize('hoge.csv'));
  header('Content-Disposition: attachment; filename=hoge.csv');
  readfile('hoge.csv');
  
  return view('test', compact('data'))
}

Route

use App\Http\Controllers\TestController;

Route::post('/postcsv', [TestController::class, 'postCsv']);

参照

LaravelでCSV出力を行う方法

basic, php, programming

Posted by 異世界攻略班