php think make:listener <カスタマイズされたクラス名>例:
php think make:listener UserListener実行後、
UserListener が <フレームワークのルート ディレクトリ>\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.
php think make:subscribe <カスタマイズされたクラス名>
例:
php think make:subscribe UserSubscribe
2. モニタリングの設定ファイル実行後、UserSubscribe クラスが <フレームワーク ルート ディレクトリ>\app\subscribe\ に生成されます。
'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(); } }
php think make:event <カスタマイズされたクラス名>
#例:php think make:event UserEvent
実行後、UserEvent クラスが <フレームワーク ルート ディレクトリ>\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 サイトの他の関連記事を参照してください。