ホームページ  >  記事  >  PHPフレームワーク  >  Laravelモデルのイベントの2つの方法を詳しく解説

Laravelモデルのイベントの2つの方法を詳しく解説

藏色散人
藏色散人転載
2021-07-23 15:03:052762ブラウズ

ユーザー操作イベントを日常的に扱う場合、時々必要になることがあります。後で参照したり、ビッグ データの統計情報を得るために、それらを記録します。


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 = [&#39;user_name&#39;, &#39;user_id&#39;, &#39;url&#39;, &#39;event&#39;, &#39;method&#39;, &#39;table&#39;, &#39;description&#39;];
}
  • 移行テーブルの作成:
  • 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(&#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');
        }
    }

    移行を実行します。テーブルを生成します

      php 職人移行
      すべてのモデル イベント オブザーバーを均一に登録する新しいサービス プロバイダーを作成します (後続の名前はより明確になります) )

    php 職人 make:provider ObserverLogServiceProvider

    • /config/app の
    • providers
    配列に追加します。 php

    登録(大まかに図のように)

    • # に新しいフォルダーを作成します#app
    ディレクトリ

    Observers モデル オブザーバーを格納し、新しい基本クラス LogBaseServerLaravelモデルのイベントの2つの方法を詳しく解説 を作成し、コンストラクターで基本属性を構築します (CLI は、コマンド ライン)

    • ##基本クラス LogBaseServer
    • (
    User

    モデル、メソッド 名前はドキュメント内のイベントに対応する必要があります) Laravelモデルのイベントの2つの方法を詳しく解説

    • ##新しいサービス プロバイダーObserverLogServiceProvider実行中

    Laravelモデルのイベントの2つの方法を詳しく解説

      # 必要なモデルのイベントを登録します (Iかなりの数があります。おそらく将来はこのようになるでしょう)

    Laravelモデルのイベントの2つの方法を詳しく解説

    次に、いくつかのイベントをトリガーします。 (テーブルデータの追加、削除、変更が可能です)

    Laravelモデルのイベントの2つの方法を詳しく解説

    ##多対多くの関連付け挿入ではモデル (
      attach
    • メソッドなど) はトリガーされません
    現時点では、シミュレートする新しいイベント クラスを作成する必要があります (ここでは、アクセス許可を割り当てる方法の大まかな概要を示します)役割)

    1. Laravelモデルのイベントの2つの方法を詳しく解説EventServiceProvider

    listen
    属性はイベントにバインドされます
    2. イベント

    PermissionRoleEvent パラメーターに 2 つ注入します。1 つはロール、もう 1 つは attach または detach# によって返される配列です。

    Laravelモデルのイベントの2つの方法を詳しく解説

    #

    3. イベント リスナー PermissionRoleEventLog も基本クラス LogBaseServer を継承しており、ここでは受信配列 ID に従って走査され、ログ

    # が作成されます。 Laravelモデルのイベントの2つの方法を詳しく解説

    ##4. 次に、イベント

    Laravelモデルのイベントの2つの方法を詳しく解説


    を適用します。
      Update ログイン イベントとログアウト イベントを適切に処理する
    • #1.
    EventServiceProvider

    subscribe 属性を適切に処理されるクラス ## にバインドします。

    Laravelモデルのイベントの2つの方法を詳しく解説##2. イベント リスニング クラスのメソッド

    # #3. 効果後は次のようになります: Laravelモデルのイベントの2つの方法を詳しく解説

    Laravelモデルのイベントの2つの方法を詳しく解説

    #関連する推奨事項:
  • 最新の 5 つの Laravel ビデオ チュートリアル

    以上がLaravelモデルのイベントの2つの方法を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    声明:
    この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。