CSVエキスポートの作成(拡張機能 : ダウンロード履歴)

2019/08/26

以前、「CSVダウンロードの作成」について何回かに分けてエントリーしました。

今回はその拡張機能で「ダウンロード履歴」の機能をつけ足してみます。

 

仕様

「CSVダウンロード」ボタンを押すと「csv_download_histories」テーブルに接続元IPアドレスやCSVファイル名の情報を格納させます。

「csv_download_histories」テーブルの構造は以下です。

カラム名 データ型 コメント
id auto_increment ID
csv_filename varchar(255) CSVファイル名
remote_address varchar(255) 接続元IP
created_at timestamp 作成日時
updated_at timestamp 編集日時

 

手順

 

マイグレーション

マイグレーションファイルの作成

php artisan make:migration create_csv_download_histories --create=csv_download_histories

 

ポイント

テーブル名は複数形にします。history → histories

 

マイグレーションファイルの編集

public function up()
{
    Schema::create('csv_download_histories', function (Blueprint $table) {
        $table->increments('id');
        $table->string('csv_filename')->comment('CSVファイル名');
        $table->string('remote_address')->comment('接続元IP');
        $table->timestamps();
    });
}

public function down()
{
    Schema::drop('csv_download_histories');
}

 

マイグレーションの実行

php artisan migrate

 

 

モデルの作成


php artisan make:model Models/CsvDownloadHistory

 

ポイント

モデル名は単数形です。

 


class CsvDownloadHistoriy extends Model
{
    // ホワイトリスト
    protected $fillable = [
        'csv_filename'
      , 'account'
      , 'remote_address'
   ];

   // 履歴を登録するメソッド
   public static function regist_history($req, $fname)
   {
      $history = new CsvDownloadHistoriy;
      $history->csv_filename = $fname;
      $history->remote_address = $req->server('REMOTE_ADDR');
      $history->save();
   }
}

 

ポイント
laravelで$_SERVER変数の値を取得する

LaravelのRequestクラスはSymfonyのRequestクラスを継承しているので次のように書くと取得できます。


$request->server('REMOTE_ADDR');

 

コントローラに設定

CSVダウンロードのコントローラに以下のように追記します。


use App\Models\CsvDownloadHistoriy; // エイリアス
public function download1(Request $req) //  RequestクラスをDIして利用
{
:
// ファイル名
$filename = "auth_info_profiles_".date('Ymd').".csv";

// ダウンロード履歴 ←今回追記
CsvDownloadHistoriy::regist_history($req,$filename);

// 仮ファイルOpen
$stream = fopen('php://temp', 'r+b');
:

 

前回作成したCSVダウンロードのコントローラは以下です。

 

解説

訪問者のipアドレスを取得するためには、サーバー環境変数の$_SEVER["REMOTE_ADDR"]を参照します。

そのためにRequestクラスをDIして利用します。

 

動作確認

ダウンロードボタンを押してCSVをダウンロードしたあとデータベースのテーブルを確認してみます。

 
以上です。

 
当サイトで実演 & 解説している Laravel のプログラムは さくらのレンタルサーバ スタンダード の環境を前提にして解説しています。

非常にコスパがよく利用者からも評価が高いサーバーです。もし、当サイトで解説している Laravel のチュートリアルを同じ環境で試して動かしてみたい方はおススメのサーバーです。

本庄マサノリ

仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら

>> Twitter をフォローする

 

-チュートリアル, 中級