ユーザー操作イベントを日常的に扱う場合、時々必要になることがあります。後で参照したり、ビッグ データの統計情報を得るために、それらを記録します。
Laravel はモデルイベントでの処理に非常に便利です: https://laravel-china.org/docs/laravel/5.5/eloquent#events
Laravel のモデルイベントには 2 つの方法があります。新しいモデル
php 職人の作成:モデル ログ
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Log extends Model { protected $fillable = ['user_name', 'user_id', 'url', 'event', 'method', 'table', 'description']; }
php Artisan make:migration create_logs_table
- テーブルの構造は大まかに次のとおりです。必要に応じて設計できます
<?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateLogsTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('logs', function (Blueprint $table) { $table->engine = 'InnoDB'; $table->increments('id'); $table->string('user_id')->comment('操作人的ID'); $table->string('user_name')->comment('操作人的名字,方便直接查阅'); $table->string('url')->comment('当前操作的URL'); $table->string('method')->comment('当前操作的请求方法'); $table->string('event')->comment('当前操作的事件,create,update,delete'); $table->string('table')->comment('操作的表'); $table->string('description')->default(''); $table->timestamps(); }); DB::statement("ALTER TABLE `logs` comment '操作日志表'"); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('logs'); } }
移行を実行します。テーブルを生成します
- php 職人移行
- すべてのモデル イベント オブザーバーを均一に登録する新しいサービス プロバイダーを作成します (後続の名前はより明確になります) )
php 職人 make:provider ObserverLogServiceProvider
- を
- /config/app の providers
登録(大まかに図のように)
Observers モデル オブザーバーを格納し、新しい基本クラス LogBaseServer を作成し、コンストラクターで基本属性を構築します (CLI は、コマンド ライン)
-
##基本クラス
LogBaseServer (
モデル、メソッド 名前はドキュメント内のイベントに対応する必要があります)
-
##新しいサービス プロバイダーObserverLogServiceProvider実行中
- # 必要なモデルのイベントを登録します (Iかなりの数があります。おそらく将来はこのようになるでしょう)
次に、いくつかのイベントをトリガーします。 (テーブルデータの追加、削除、変更が可能です)
##多対多くの関連付け挿入ではモデル (
- attach
- メソッドなど) はトリガーされません
1. EventServiceProvider
listen属性はイベントにバインドされます
PermissionRoleEvent パラメーターに 2 つ注入します。1 つはロール、もう 1 つは
attach または
detach# によって返される配列です。
#
3. イベント リスナー PermissionRoleEventLog
も基本クラス LogBaseServer
を継承しており、ここでは受信配列 ID に従って走査され、ログ
# が作成されます。
##4. 次に、イベント
を適用します。
- Update ログイン イベントとログアウト イベントを適切に処理する
- #1.
の subscribe
属性を適切に処理されるクラス ## にバインドします。
##2. イベント リスニング クラスのメソッド
# #3. 効果後は次のようになります:
#関連する推奨事項: