検索
ホームページPHPフレームワークThinkPHPThinkphp イベントメカニズムを実装する方法

    #イベント メカニズムを実装するには、リスニングとサブスクリプションによる 2 つの方法があります。

    1. リスニングによる

    1. listen class : コマンドラインモードでフレームワークのルートディレクトリに入り、

    php think make:listener

    例:

    php think make:listener UserListener

    実行後、

    UserListener が \app\listener## に生成されます#\ このクラス。 2. リスニングの設定: ファイル \app\event.php の listen 配列で UserListener クラスを次のように設定します:

    'listen' => [
    'testEvent' => ['app\listener\UserListener']

    ],

    3. リスニングをトリガーする: リスニングをトリガーする必要がある場所に次の行を追加します。コード
    event('testEvent');

    注: ここでのパラメータ testEvent はイベント名であり、任意に定義できますが、event.php ファイルで設定されたキー名と一致している必要があります。

    リスナーをトリガーするときに 2 番目のパラメーターを指定できます。ハンドル メソッドのパラメーターである 2 番目のパラメーターを介して、任意のデータを UserListener クラスに渡すことができます (意味がわからない場合は、以下の完全なコードを見て理解してください)。

    4. リスニング ロジックの処理: UserListener クラスの handle メソッドでビジネス ロジックを完成させます

    完全なコードは次のとおりです

    その他: テストに使用されるクラス

    <?php
    namespace app\controller;
    class Other
    {
        public function hello()
        {
            echo &#39;hello function&#39;;
        }
    }

    Index: リスニングをトリガーするクラス

    UserListener: イベント リスニング クラス

    <?php
    namespace app\listener;
    class UserListener
    {
        /**
         * 事件监听处理
         *
         * @return mixed
         */
        public function handle($event)
        {
            //当调用Index类的test1方法时该代码有效,$event为null
            var_dump($event);
            //当调用Index类的test2方法时该代码有效,$event为字符串hello
            var_dump($event);
            //当调用Index类的test3方法时该代码有效,$event为Index类的实例
            //可以访问Index类的name变量
            echo $event->name;
            //当调用Index类的test4方法时该代码有效,$event为Other类的实例
            //可以调用Other类的hello方法
            echo $event->hello();
        }
    }

    2.

    1 をサブスクライブして、サブスクリプション クラス ## を作成します。コマンド内の

    # ライン モードで、フレームワークのルート ディレクトリに入り、

    php think make:subscribe

    例:

    php think make:subscribe UserSubscribe

    実行後、UserSubscribe クラスが \app\subscribe\ に生成されます。

    2. モニタリングの設定

    ファイル \app\event.php のサブスクライブ配列で UserSubscribe クラスを次のように設定します:

    'subscribe' => ['app\subscribe\UserSubscribe'],

    注: 効果をテストするには、上で構成した UserListener をリッスン配列から削除する必要があります

    3. トリガー監視

    最初の方法と同じ

    4. プロセス監視ロジック

    プロセス監視ロジックには 2 つの方法があり、これを自動バインディングと呼びます。手動バインディング。手動バインドと自動バインドは相互に排他的であり、どちらか一方のみを選択できます。

    4.1 自動バインディング

    ビジネス ロジックを完成させる ontestEvent メソッドを UserSubscribe クラスに追加する必要があります。追加するメソッド名は任意に定義することはできず、イベント名の前に追加するのがルールです。 event.php で定義したイベント名は testEvent であるため、メソッド名は ontestEvent になります (大文字と小文字に注意してください)。リスニング メソッドが定義されると、自動的にイベントにバインドされるため、これを自動バインディングと呼びます。
    完全なコードは次のとおりです。

    Other クラスと Index クラスのコードは最初のアプローチと同じです

    UserSubscribe: イベント サブスクリプション クラス

    <?php
    namespace app\subscribe;
    class UserSubscribe
    {
        public function ontestEvent($user)
        {
            //当调用Index类的test1方法时该代码有效,$event为null
            var_dump($user);
            //当调用Index类的test2方法时该代码有效,$event为字符串hello
            var_dump($user);
            //当调用Index类的test3方法时该代码有效,$event为Index类的实例
            //可以访问Index类的name变量
            echo $user->name;
            //当调用Index类的test4方法时该代码有效,$event为Other类的实例
            //可以调用Other类的hello方法
            echo $user->hello();
        }
    }

    4.2 手動バインディング

    まず、特定のビジネス ロジックの処理を担当するイベント クラスを作成します。コマンド ライン モードでフレームワークのルート ディレクトリを入力し、次を実行します:

    php think make:event

    #例:

    php think make:event UserEvent

    実行後、UserEvent クラスが \app\event\ に生成されます。

    次に、このクラスに受信パラメータを持つハンドル メソッドを定義します。メソッド名と渡されるパラメータ名は任意に定義できます。特定のビジネス ロジックは handle メソッドで処理できます。

    次に、UserSubscribe クラスに Subscribe メソッドを追加します。このメソッドは、Event オブジェクトをパラメータとして受け取る必要があります。次に、この関数の UserEvent クラスのハンドル メソッドにイベント リスナーをバインドします。次のとおりです:

    $event->listen(&#39;testEvent&#39;, [app(&#39;app\event\UserEvent&#39;), &#39;handle&#39;]);

    完全なコードは次のとおりです

    Other クラスと Index クラスのコードは最初のアプローチと同じです

    UserSubscribe: イベント サブスクリプション クラス

    UserEvent: イベント処理クラス

    <?php
    declare (strict_types = 1);
    namespace app\event;
    class UserEvent
    {
        public function handle($user)
        {
            //当调用Index类的test1方法时该代码有效,$user为null
            var_dump($user);
            //当调用Index类的test2方法时该代码有效,$user为字符串hello
            var_dump($user);
            //当调用Index类的test3方法时该代码有效,$user为Index类的实例
            //可以访问Index类的name变量
            echo $user->name;
            //当调用Index类的test4方法时该代码有效,$user为Other类的实例
            //可以调用Other类的hello方法
            echo $user->hello();
        }
    }

    以上がThinkphp イベントメカニズムを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

    ホットAIツール

    Undresser.AI Undress

    Undresser.AI Undress

    リアルなヌード写真を作成する AI 搭載アプリ

    AI Clothes Remover

    AI Clothes Remover

    写真から衣服を削除するオンライン AI ツール。

    Undress AI Tool

    Undress AI Tool

    脱衣画像を無料で

    Clothoff.io

    Clothoff.io

    AI衣類リムーバー

    Video Face Swap

    Video Face Swap

    完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

    ホットツール

    MantisBT

    MantisBT

    Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

    SecLists

    SecLists

    SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

    AtomエディタMac版ダウンロード

    AtomエディタMac版ダウンロード

    最も人気のあるオープンソースエディター

    EditPlus 中国語クラック版

    EditPlus 中国語クラック版

    サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

    SublimeText3 Mac版

    SublimeText3 Mac版

    神レベルのコード編集ソフト(SublimeText3)