CSVダウンロードのためのビューには、チェックボックスと、サブミットボタンがあります。
チェックボックスが一つもチェックされていない場合、サブミットボタンを押すと同じページにリダイレクトして、エラー文を表示するという処理がしたいです。
サブミットボタンを押すと、CsvControllerのcallCSVdownloadが呼ばれます。
public function callCSVdownload() { $flag = $this->validateCSVdata(); if ($flag === true) { $this->csvDownload(); } }
public function validateCSVdata() { $arrayKey = array_keys($this->request->all()); //リストが未選択になっていないかのチェック if (!preg_grep("/^list/", $arrayKey)) { //含まれていない場合 return redirect('csv_export')->with([ 'listErr' => 'リストを選択してください', 'error' => 'リストを選択してください', ]); } ~~~
constructorはこのようになっています。
public function __construct(Request $request) { parent::__construct(); $this->request = $request; }
csvDownload関数はこのようになっています。
public function csvDownload() { // csvDataを作る処理~~ $fileName = "monthlyData.csv"; $csvData = $this->exportMonthlyCSV(); // csvDataを作る処理終わり $headers = [ "Content-type" => "text/csv", "Content-Disposition" => "attachment; filename=" . $fileName, "Pragma" => "no-cache", "Cache-Control" => "must-revalidate, post-check=0, pre-check=0", "Expires" => "0", ]; $callback = function () use ($csvData) { $handle = fopen('php://output', 'w'); foreach ($csvData as $row) { mb_convert_variables('SJIS-win', 'UTF-8', $row); fputcsv($handle, $row); } fclose($handle); }; return response()->stream($callback, 200, $headers); }
dd()
でエラーを検知することはできているのですが、dd()
以外で処理が止まりません。例えば、RedirectResponse
が返ってきても、正常にリダイレクトせず、空白ページが表示されてしまいます。
response->stream()が関係しているような気がするのですが、デバッグの方法が難しく解決方法が見つからない状態です。
もし同じようなことを経験されたことがある方などおられましたら、ご教授いただきたいですm(_ _)m
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/09 07:50