【PHP/Laravel】CSV出力を簡単に試す場合
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']);