Lorsque nous traitons quotidiennement certains événements d'opération utilisateur, nous devons parfois les enregistrer pour référence ultérieure ou pour des statistiques Big Data.
Laravel est très pratique à gérer dans les événements modèles : https://laravel-china.org/docs/laravel/5.5/eloquent#events
Les événements modèles de Laravel ont deux manières,
- set
dispatchesEvents
Événement de mappage de propriétés classes - Utilisez des observateurs pour enregistrer des événements. Voici le deuxième type
- Créez un nouveau modèle
php artisan make:model Log
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Log extends Model { protected $fillable = ['user_name', 'user_id', 'url', 'event', 'method', 'table', 'description']; }
- Créez une table de migration :
php artisan make:migration create_logs_table
- La structure de la table est à peu près comme ceci, qui peut être utilisé selon les besoins Design
<?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'); } }
- Exécutez la migration pour générer la table
php artisan migrate
- Créez un nouveau fournisseur de services pour enregistrer uniformément tous les observateurs d'événements modèles (vous pourrez choisir un nom plus vivant plus tard)
php artisan make:provider ObserverLogServiceProvider
- to
/config/app.php
L'enregistrement duproviders
array dans
- Créez un nouveau dossier
app
dans leObservers
répertoire pour stocker l'observateur du modèle, créez une nouvelle classe de baseLogBaseServer
et construisez les attributs de base dans le constructeur (CLI est dû au fait qu'il n'y a pas d'exécution utilisateur lors de l'exécution à partir de la ligne de commande)
- Créez un nouvel observateur pour hériter de la classe de base
LogBaseServer
(modèle Utilisateur, le nom de la méthode doit correspondre à l'événement dans le document)
- Accédez au fournisseur de services nouvellement créé
ObserverLogServiceProvider
et exécutez
- pour enregistrer des événements pour les modèles requis (j'en ai beaucoup , et cela ressemblera probablement à ça dans le futur)
- Ensuite, nous déclenchons certains événements (ajouter, supprimer, modifier, les données du tableau sont disponibles)
- L'insertion d'associations plusieurs-à-plusieurs ne déclenchera pas le modèle (comme la
attach
méthode) - Cela est nécessaire pour le moment. Créez vous-même une nouvelle classe d'événements à simuler (voici une description approximative de l'attribution d'autorisations aux rôles)
1. Liez l'attribut EventServiceProvider
dans listen
à l'événement
2. Injectez deux paramètres dans l'événement PermissionRoleEvent
, l'un est le rôle, l'autre est le tableau renvoyé par attach
ou detach
3. L'écouteur d'événementPermissionRoleEventLog
hérite également de la classe de baseLogBaseServer
, ici elle est parcourue en fonction de l'identifiant du tableau entrant, puis crée un journal
4.
Plus Gérer les événements de connexion et de déconnexion avec élégance
1. Liez l'attributdans
- à une classe bien gérée
EventServiceProvider
subscribe
2. 3. L'effet est le suivant :
Recommandations associées : Les cinq derniers didacticiels vidéo Laravel