操作ログ用のテーブル作成
migrationファイル作成
$ php artisan make:migration create_action_logs_table --create=action_logs
マイグレーションファイル編集
マイグレーションファイルを開き、取得するカラム情報を書いていきます。
$ vi database/migrations/2020_XX_XX_XXXXXX_create_action_logs_table.php
$table->string('ip_address')->nullable()->comment('IPアドレス');
$table->string('route')->nullable()->comment('ルートエイリアス');
$table->string('method')->nullable()->comment('接続メソッド');
$table->integer('status')->unsigned()->nullable()->comment('返却ステータス');
$table->string('url')->nullable()->comment('API URL');
$table->text('user_agent')->nullable()->comment('ユーザーエージェント');
$table->bigInteger('actioned_by')->nullable()->unsigned()->comment('操作者');
$table->timestamp('actioned_at')->useCurrent()->comment('操作日時');
マイグレーション実行
書き終えたら、マイグレーションを実行します。
※今回は既存のテーブルとseederファイルが存在するため、refreshしてseederも同時に実行します。
$ php artisan migrate:refresh --seed
操作ログテーブル用のモデル作成
モデル作成
$ php artisan make:model ActionLog
ミドルウェア作成
操作ログで取得するためのミドルウェアを作成します。
ミドルウェア作成
$ php artisan make:middleware ActionlogMiddleware
ミドルウェア編集
$ vi app/Http/Middleware/ActionlogMiddleware.php
namespace App\Http\Middleware;
use Closure;
use App\Models\ActionLog;
use App\Services\ActionLogService;
use \Route;
class ActlogMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle(Request $request, Closure $next)
{
$response = $next($request);
$this->insertActionLog($request, $response->status());
return $response;
}
/**
* 操作ログ登録処理
*
* @param $request
* @param $status
* @return void
*/
public function insertActionLog($request, $status)
{
$user = $request->user();
$data = [
'route' => Route::currentRouteName(),
'url' => $request->path(),
'ip_address' => $request->ip(),
'method' => $request->method(),
'status' => $status,
'user_agent' => $request->userAgent(),
'actioned_by' => $user ? $user->id : null,
];
$actionLog = new ActionLog;
$actionLog->create($data);
}
}
ミドルウェア登録
今回はAPIの操作ログとなるため、Kernel.phpの $middlewareGroupsの 「api」 に追加します。
$ vi app/Http/Kernel.php
/**
* The application's route middleware groups.
*
* @var array
*/
protected $middlewareGroups = [
・・・
'api' => [
・・・
\App\Http\Middleware\ActionlogMiddleware::class,
・・・
],
];
これで完了です。
コメント