Maison > cadre php > Laravel > le corps du texte

Explication détaillée de deux méthodes d'événements du modèle Laravel

藏色散人
Libérer: 2021-07-26 09:11:17
avant
2757 Les gens l'ont consulté

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,

  • setdispatchesEventsÉ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 = [&#39;user_name&#39;, &#39;user_id&#39;, &#39;url&#39;, &#39;event&#39;, &#39;method&#39;, &#39;table&#39;, &#39;description&#39;];
}
Copier après la connexion
  • 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(&#39;logs&#39;, 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');
    }
}
Copier après la connexion
  • 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 du providersarray dans

Explication détaillée de deux méthodes dévénements du modèle Laravel

  • Créez un nouveau dossier app dans le Observers répertoire pour stocker l'observateur du modèle, créez une nouvelle classe de base LogBaseServer 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)

Explication détaillée de deux méthodes dévénements du modèle Laravel

  • Créez un nouvel observateur pour hériter de la classe de baseLogBaseServer (modèle Utilisateur, le nom de la méthode doit correspondre à l'événement dans le document)

Explication détaillée de deux méthodes dévénements du modèle Laravel

  • Accédez au fournisseur de services nouvellement créé ObserverLogServiceProvider et exécutez

Explication détaillée de deux méthodes dévénements du modèle Laravel

  • pour enregistrer des événements pour les modèles requis (j'en ai beaucoup , et cela ressemblera probablement à ça dans le futur)

Explication détaillée de deux méthodes dévénements du modèle Laravel

  • Ensuite, nous déclenchons certains événements (ajouter, supprimer, modifier, les données du tableau sont disponibles)

Explication détaillée de deux méthodes dévénements du modèle Laravel


  • L'insertion d'associations plusieurs-à-plusieurs ne déclenchera pas le modèle (comme la attachmé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

Explication détaillée de deux méthodes dévénements du modèle Laravel

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

Explication détaillée de deux méthodes dévénements du modèle Laravel

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

Explication détaillée de deux méthodes dévénements du modèle Laravel

4.

Plus Gérer les événements de connexion et de déconnexion avec élégance Explication détaillée de deux méthodes dévénements du modèle Laravel

1. Liez l'attribut
dans
    à une classe bien gérée

EventServiceProvidersubscribe

2. Explication détaillée de deux méthodes dévénements du modèle Laravel3. L'effet est le suivant :

Explication détaillée de deux méthodes dévénements du modèle Laravel

Recommandations associées : Les cinq derniers didacticiels vidéo LaravelExplication détaillée de deux méthodes dévénements du modèle Laravel

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:segmentfault.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal