-
エラーチェック:
- 最初に、選択されたセンサーが存在しないかどうかを確認します。**
selectedSensors
**という配列が空であれば、選択されたセンサーがないということです。その場合、エラーメッセージが表示され、関数はそこで終了します。
- 最初に、選択されたセンサーが存在しないかどうかを確認します。**
-
リクエストの準備:
- 選択されたセンサーが存在する場合は、リクエストのパラメータを準備します。これは、選択されたセンサーの情報を含むオブジェクトです。
-
ダウンロードリクエストの送信:
- ダウンロードを実行するために、HTTP POSTリクエストが行われます。リクエストのURLは**
/admin/sensor/download
**です。 - レスポンスの形式はBlob形式で、これはファイルデータをバイナリ形式で表します。
- ダウンロードを実行するために、HTTP POSTリクエストが行われます。リクエストのURLは**
-
リクエストの成功とファイルのダウンロード:
- リクエストが成功すると、サーバーからの応答データがBlobとして返されます。
- このBlobデータから、ダウンロードするファイルの種類(MIMEタイプ)とファイル名を取得します。
- 最後に、ブラウザがBlobデータをファイルとしてダウンロードします。
-
エラーハンドリング:
- もしリクエストがエラーを返した場合、**
catch
**ブロックが実行されます。この場合、エラーメッセージが表示されます。
- もしリクエストがエラーを返した場合、**
-
最後の処理:
- ダウンロード処理の成否にかかわらず、最後にローディング状態を解除します。
public function download(Request $request) { // 選択中のセンサー情報のSIDをリクエストから取得 $selectedSensorSids = $request->input('sid'); // 選択中のセンサー情報をデータベースから取得 $selectedSensors = MtSensor::whereIn('sid', $selectedSensorSids)->get(); // CSVデータを生成 $csvData = $this->createCsvData($selectedSensors); // CSVデータをレスポンスとして返す return Response::make($csvData, 200, [ 'Content-Type' => 'text/csv', 'Content-Disposition' => 'attachment; filename="selected_sensors.csv"', ]); } /** * 選択されたセンサー情報からCSVデータを生成するメソッド * * @param \Illuminate\Database\Eloquent\Collection $selectedSensors * @return string */ private function createCsvData($selectedSensors) { // CSVのヘッダー行を作成 $csvData = "Sensor ID, ID, Temperature Lower, Temperature Upper, Humidity Lower, Humidity Upper, Battery Level, No Signal Time, Group SID, Remarks, Receive Interval, Is Enabled\n"; // 選択されたセンサー情報をループしてCSVデータを追加 foreach ($selectedSensors as $sensor) { // 各センサーの情報をCSV行に追加 $csvData .= "{$sensor->sensor_id}, {$sensor->id}, {$sensor->temperature_lower}, {$sensor->temperature_upper}, {$sensor->humidity_lower}, {$sensor->humidity_upper}, {$sensor->battery_level}, {$sensor->no_signal_time}, {$sensor->group_sid}, {$sensor->remarks}, {$sensor->receive_interval}, {$sensor->is_enabled}\n"; } return $csvData; } }
download
メソッドの解説:- リクエストの処理: 選択中のセンサー情報のSIDをリクエストから取得します。
- データベースからの取得: 取得したSIDを使って、選択中のセンサー情報をデータベースから取得します。
-
CSVデータの生成: 取得したセンサー情報からCSVデータを生成する
createCsvData
メソッドを呼び出します。 -
レスポンスの作成: 生成したCSVデータをレスポンスとして返し、ダウンロードさせます。
createCsvData
メソッドの解説: - CSVヘッダーの作成: CSVファイルの最初の行に、各列のヘッダー情報を追加します。
- センサー情報の追加: データベースから取得した各センサーの情報をループして、CSVデータに追加します。
More than 1 year has passed since last update.
Register as a new user and use Qiita more conveniently
- You get articles that match your needs
- You can efficiently read back useful information
- You can use dark theme