ホームページ >PHPフレームワーク >ThinkPHP >Thinkphp イベントメカニズムを実装する方法
php think make:listener 13ebef09a18affb4c3b25f898e8269b6例:
php think make:listener UserListener実行後、
UserListener が cce70da58305dac6601d54f49bfa29af\app\
listener## に生成されます#\ このクラス。 2. リスニングの設定: ファイル
'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 'hello function'; } }
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 13ebef09a18affb4c3b25f898e8269b6
例:
php think make:subscribe UserSubscribe
2. モニタリングの設定ファイル実行後、UserSubscribe クラスが ac53bfb9ca280e594ef01e44320f8ef8\app\subscribe\ に生成されます。
\app\event.php のサブスクライブ配列で UserSubscribe クラスを次のように設定します: 'subscribe' => ['app\subscribe\UserSubscribe'],
3. トリガー監視最初の方法と同じ4. プロセス監視ロジックプロセス監視ロジックには 2 つの方法があり、これを自動バインディングと呼びます。手動バインディング。手動バインドと自動バインドは相互に排他的であり、どちらか一方のみを選択できます。 4.1 自動バインディングビジネス ロジックを完成させる ontestEvent メソッドを UserSubscribe クラスに追加する必要があります。追加するメソッド名は任意に定義することはできず、イベント名の前に追加するのがルールです。 event.php で定義したイベント名は testEvent であるため、メソッド名は ontestEvent になります (大文字と小文字に注意してください)。リスニング メソッドが定義されると、自動的にイベントにバインドされるため、これを自動バインディングと呼びます。 完全なコードは次のとおりです。Other クラスと Index クラスのコードは最初のアプローチと同じですUserSubscribe: イベント サブスクリプション クラス注: 効果をテストするには、上で構成した UserListener をリッスン配列から削除する必要があります
<?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 クラスが ac53bfb9ca280e594ef01e44320f8ef8\app\event\ に生成されます。 次に、このクラスに受信パラメータを持つハンドル メソッドを定義します。メソッド名と渡されるパラメータ名は任意に定義できます。特定のビジネス ロジックは handle メソッドで処理できます。次に、UserSubscribe クラスに Subscribe メソッドを追加します。このメソッドは、Event オブジェクトをパラメータとして受け取る必要があります。次に、この関数の UserEvent クラスのハンドル メソッドにイベント リスナーをバインドします。次のとおりです:
$event->listen('testEvent', [app('app\event\UserEvent'), 'handle']);完全なコードは次のとおりです
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 サイトの他の関連記事を参照してください。