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ダウンロードのコントローラは以下です。
CSVダウンロードの作成(ステップ3:CSVダウンロード機能の作成)
解説
訪問者のipアドレスを取得するためには、サーバー環境変数の$_SEVER["REMOTE_ADDR"]
を参照します。
そのためにRequestクラスをDIして利用します。
動作確認
ダウンロードボタンを押してCSVをダウンロードしたあとデータベースのテーブルを確認してみます。
以上です。
当サイトで実演 & 解説している Laravel のプログラムは さくらのレンタルサーバ スタンダード の環境を前提にして解説しています。
非常にコスパがよく利用者からも評価が高いサーバーです。もし、当サイトで解説している Laravel のチュートリアルを同じ環境で試して動かしてみたい方はおススメのサーバーです。
仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら。