質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

1回答

1719閲覧

URLパラメータの値を使ってCSVダウンロード:Laravel

No.Mi

総合スコア6

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2018/09/26 04:14

前提・実現したいこと

Laravelのapiを使って、URLパラメータの値を反映したクエリをデータベースに投げて
CSVでダウンロードする機能を作ってます。
参考文献:
http://toyo.hatenablog.jp/entry/2017/04/16/115309

発生している問題・エラーメッセージ

StreamedResponse内でエラーが起きてるためか、
ダウンロードのページで
「このサイトにアクセスできません」
と出力されます。

該当のソースコード

リンクにはURLパラメータを付与して、
モデルファイルでクエリビルダを使用してデータを受け取ります。

php

1<?php 2 3namespace App\Models; 4 5use Illuminate\Database\Eloquent\Model; 6use Illuminate\Support\Facades\DB; 7use Symfony\Component\HttpFoundation\StreamedResponse; 8 9class CSV extends Model 10{ 11 protected $table = 'テーブル名'; 12 13 public function getCsv($request){ 14 15 $md=DB::table($this -> table); 16 // クエリビルダには $requestの値(URLパラメータ)を使用します 17 $md=$md->クエリビルダ; 18 19 $data = $md->get(); 20 21 $csv[] = array('カラム名'); 22 foreach ($data as $key => $value) { 23 $csv[] = array(カラムごとにアロー演算子で代入); 24 } 25 26 // print_r($csv); 27 // exit(); 28 29 return new StreamedResponse( 30 function(){ 31 32 $stream = fopen('php://output', 'w'); 33 foreach($csv as $line){ 34 fputcsv($stream, $line); 35 } 36 fclose($stream); 37 }, 38 200, 39 [ 40 'Content-Type' => 'text/csv', 41 'Content-Disposition' => 'attachment; filename="test.csv"', 42 ] 43 ); 44 } 45}

試したこと

ソースのコメントに書いてある、
// print_r($csv);
// exit();
を実行したところ、値は取れてました。

また、参考文献のように

return new StreamedResponse( function(){

の中で配列を記述したり、
$requestを使わないクエリを投げてもデータは取れました。

初心者でクラスについての理解が浅く申し訳ありません。
StreamedResponseの中で$requestが使えてないのが原因だと思いますが、
何か方法はありますでしょうか。

補足情報(FW/ツールのバージョンなど)

Laravel5.6

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

自己解決しました。
参考文献:
https://stackoverflow.com/questions/47636108/laravel-generating-and-downloading-a-csv-file-using-streamedresponse-produces-e

クラス内のfunctionに変数を与えたいとき

return new StreamedResponse(function() use ($csv){

投稿2018/09/26 06:01

No.Mi

総合スコア6

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問