目次
Laravelの記事一覧は下記
PHPフレームワークLaravelの使い方
Laravelバージョン
動作確認はLaravel Framework 7.19.1で行っています
前提条件
eclipseでLaravel開発環境を構築する。デバッグでブレークポイントをつけて止める。(WindowsもVagrantもdockerも)
本記事は上記が完了している前提で書かれています
プロジェクトの作成もapacheの設定も上記で行っています
Controllerにメソッド追加
(1) /sample/app/Http/Controllers/SampleController.phpに下記を追記
use Illuminate\Http\Response;
(2) /sample/app/Http/Controllers/SampleController.phpにdownload1メソッド、download2メソッド、sendHeaderメソッド、sendContentBodyメソッド、sendContentEndメソッドを追記
public function download1()
{
return view('sample.download');
}
public function download2(Request $request, Response $response)
{
$this->sendHeader($response, 'sample.txt', 'text/plain');
for ($row = 0; $row < 100; $row++) {
$line = '';
for ($col = 0; $col < 10; $col++) {
$line .= $col;
$line .= "\t";
}
$line .= "\n";
$this->sendContentBody($line);
}
$this->sendContentEnd();
return $response;
}
private function sendHeader($response, $fileName, $mimeType){
$response->setProtocolVersion('1.1');
$response->headers->replace([
'Content-Type' => $mimeType,
'Content-Disposition' => 'attachment; filename="' . $fileName . '"',
'Transfer-Encoding' => 'chunked'
]);
$response->sendHeaders();
ob_flush();
flush();
}
private function sendContentBody($line){
echo dechex(strlen($line));
echo "\r\n";
echo $line;
echo "\r\n";
ob_flush();
flush();
}
private function sendContentEnd(){
echo '0';
echo "\r\n";
echo "\r\n";
ob_flush();
flush();
}
(3) /sample/routes/web.phpに下記を追記
Route::get('sample/download1', 'SampleController@download1'); Route::post('sample/download2', 'SampleController@download2');
viewの作成
/sample/resources/views/sample/download.blade.phpファイル作成
<html>
<head>
<title>sample</title>
</head>
<body>
<form action="{{ url('sample/download2') }}" method="post" >
@csrf
<input type="submit" >
</form>
</body>
</html>
動作確認
http://localhost/laravelSample/sample/download1
送信ボタンクリック
100行のタブ区切りファイルがダウンロードされました