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

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

藏色散人
リリース: 2021-07-26 09:11:17
転載
2913 人が閲覧しました

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


Laravel はモデルイベントでの処理に非常に便利です: https://laravel-china.org/docs/laravel/5.5/eloquent#events


Laravel のモデルイベントには 2 つの方法があります。新しいモデル

  • php 職人の作成:モデル ログ

1

2

3

4

5

6

7

8

<?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

      テーブルの構造は大まかに次のとおりです。必要に応じて設計できます

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    <?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 サイトの他の関連記事を参照してください。

    関連ラベル:
    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
    人気のチュートリアル
    詳細>
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート