前提・実現したいこと
PHPで家計簿ソフトを作っています。
DBから出力した一覧表をCSVにダウンロードする
機能を実装中に以下のエラーメッセージが発生しました。
Cors.phpStreameResponseにheader()関数がないと言われているようなのですが、何をどう追記するのか
が分かりません。
「Lavel CSVダウンロード」で検索してもCors.phpStreamResponseにheader()関数を自作するような記述があるページ
もなく詰まってしまいました。
どなたかご教授いただけませんか?
[環境]
ブラウザ:Google Crome
言語:PHP
フレームワーク:Laravel
DB:MySQL(この質問の時点ではダミーで固定値を入れているので関係なし)
OS:MacOS
発生している問題・エラーメッセージ
Call to undefined method Symfony\Component\HttpFoundation\StreamedResponse::header()
該当のソースコード
php
1<?php 2 3namespace App\Http\Controllers\Csv; 4 5use Illuminate\Http\Request; 6use App\Http\Controllers\Controller; 7use Illuminate\Support\Facades\DB; 8use Illuminate\Support\Facades\Auth; 9use Illuminate\Support\Facades\Config; 10use Symfony\Component\HttpFoundation\StreamedResponse; 11 12/** 13 * CSV形式でデータをダウンローするクラス 14 */ 15class CsvDownloadController extends Controller 16{ 17 public function export(Request $request) 18 { 19 $callback = function() { 20 // ストリームを開く 21 $stream = fopen('php://output','w'); 22 23 //ヘッダ(CSVに書き出す列名)の設定 24 $head = [ 25 'ID' 26 ,'金額' 27 ]; 28 29 // エクセル用に文字コードを変換する。 30 mb_convert_variables('SJIS-win','UTF-8',$head); 31 32 // ストリームにヘッダ部分を書き込む 33 fputscsv($stream, $head); 34 35 //ここにデータ本体を書き込む処理を入れる。 36 $body = [ 37 '10' 38 ,'5000' 39 ]; 40 41 // エクセル用に文字コードを変換する。 42 mb_convert_variables('SJIS-win','UTF-8',$body); 43 44 // ストリームにヘッダ部分を書き込む 45 fputscsv($stream, $body); 46 // ストリームを閉じる 47 fclose($stream); 48 }; 49 $http_response = \Illuminate\Http\Response::HTTP_OK; 50 51 $response_header = [ 52 'Content-Type' => 'text/csv' 53 ,'Content-Disposition' => 'attachment;filename="test.csv"' 54 ]; 55 56 return response()->stream($callback,$http_response,$response_header); 57 } 58} 59
試したこと
Googleで調べたところCors.phpのURLを変更したら動いたとの記述があったため、
確認してみましたが、http://127.0.0.1:8000のローカルサーバ上で動かしている
ため、他にどう直すかわかりませんでした。
<?php namespace App\Http\Middleware; use Closure; class Cors { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { return $next($request) ->header('Access-Control-Allow-Origin','http://127.0.0.1:8000')//本番環境では設定を変更。 ->header('Access-Control-Allow-Methods','GET,POST,PUT,DELETE,OPTIONS') ->header('Access-Control-Allow-Headers','Content-Type'); } }
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。