ホームページ > PHPフレームワーク > ThinkPHP > ThinkPHP6 イベントとフックの使用ガイド: トリガーとモニタリングの実装

ThinkPHP6 イベントとフックの使用ガイド: トリガーとモニタリングの実装

WBOY
リリース: 2023-08-27 15:43:45
オリジナル
987 人が閲覧しました

ThinkPHP6 イベントとフックの使用ガイド: トリガーとモニタリングの実装

ThinkPHP6 イベントとフック使用ガイド: トリガーとモニタリングの実装

概要
開発プロセス中、多くの場合、次のようないくつかのイベントを処理する必要があります。ユーザー登録が成功しましたので、後日メールでリマインダーを送信したり、商品が棚から削除された後にキャッシュを更新したりしてください。これらのイベントをより適切に管理するために、ThinkPHP6 はイベントとフックのメカニズムを提供し、イベントのトリガーと監視をより柔軟かつ便利にします。

1. イベントとリスナー
イベントとは、ユーザー登録の成功や注文の成功など、プログラムの実行中に発生することを指します。リスナーはイベントに応答します。つまり、イベントの発生後に特定の操作を実行します。 ThinkPHP6 のイベントとリスナーは、イベントのトリガーと対応する操作を分離するオブザーバー モードを使用して管理されます。

  1. イベント リスナーの登録
    ThinkPHP6 では、リスナー クラスを定義することでイベント リスナーを登録できます。リスナー クラスは app/listener ディレクトリにあり、定義する場合は thinklistenerListener クラスを継承し、その handle() メソッドを実装する必要があります。たとえば、ユーザー登録成功イベントをリッスンする UserRegisteredListener クラスを定義します。
namespace applistener;

use thinklistenerListener;

class UserRegisteredListener extends Listener
{
    // 定义事件监听方法
    public function handle($event)
    {
        // 处理事件的操作
        // 比如发送邮件通知
        // ...
    }
}
ログイン後にコピー

handle() メソッドでは、対応するイベントの発生後に実行する必要がある操作を記述できます。

  1. 登録されたイベントとリスナーの対応関係
    ThinkPHP6では、イベント定義ファイルでイベントとリスナーの対応関係を指定できます。イベント定義ファイルは app/event.php ファイルにあり、イベントとリスナー間の対応関係は構成配列を通じて定義されます。
return [
    'bind' => [
        'UserRegistered' => [
            'applistenerUserRegisteredListener',
        ],
    ],
];
ログイン後にコピー

上記の設定は、イベント UserRegistered が発生すると、UserRegisteredListener の handle() メソッドがトリガーされることを示しています。

2. イベントのトリガー
イベントが発生すると、イベントをトリガーしてシステムに通知し、対応するリスナーを実行できます。

  1. イベント トリガーのメソッド
    ThinkPHP6 は、イベントをトリガーする 2 つの方法を提供します:

(1) 直接トリガー: システム クラスのdispatch() メソッドを介して直接トリガーします。イベントをトリガーします。

use thinkacadeEvent;

// 触发 UserRegistered 事件,可以传递参数
Event::dispatch('UserRegistered', $userData);
ログイン後にコピー

(2) コンテナ内でのトリガー: コンテナーのevent()メソッドを通じてイベントをトリガーしますコンストラクター内で呼び出すと、自動依存性注入が使用できます。

use thinkacadeevent;

// 通过容器内触发 UserRegistered 事件,可以传递参数
app('event')->trigger('UserRegistered', $userData);
ログイン後にコピー
  1. イベント オブジェクトの作成
    イベント リスナー処理メソッドでは、イベント オブジェクトを定義することで、イベントがトリガーされたときに渡されるパラメーターを受け取ることができます。イベント オブジェクトを作成すると、リスナーで簡単に使用できるようにパラメータがカプセル化されます。
namespace applistener;

use thinklistenerListener;
use appeventUserRegisteredEvent; // 引入事件类

class UserRegisteredListener extends Listener
{
    public function handle($event)
    {
        // 将传递的参数封装为事件对象
        $userRegisteredEvent = new UserRegisteredEvent($event);
        
        // 使用事件对象的属性
        $username = $userRegisteredEvent->username;
        // ...
    }
}
ログイン後にコピー

3. フック
フックとはシステム内に確保されているキーノードであり、フックノードに対する操作を登録することで、対応する拡張機能を実現することができます。フック ノードは通常、リクエストの開始、リクエストの終了、ルート解決など、システムのコア部分に配置されます。 ThinkPHP6 のフック メカニズムはミドルウェアを通じて実装されており、プロセスをより柔軟に制御できます。

  1. フックの登録
    ThinkPHP6 では、ミドルウェアを通じてフックを登録できます。ミドルウェアは thinkMiddleware クラスを継承しており、ミドルウェアをカスタマイズし、対応する操作をミドルウェアに実装できます。
namespace appmiddleware;

use thinkacadeEvent;

class MyMiddleware
{
    public function handle($request, Closure $next)
    {
        // 钩子操作
        // ...

        return $next($request);
    }
}
ログイン後にコピー

上記の handle() メソッドでは、対応するフック ノードが実行する必要がある操作を記述することができます。ミドルウェアを登録した後、システムのグローバル ミドルウェアまたはルーティング ミドルウェアとして構成できます。

  1. グローバル フックの登録
    グローバル フックとは、システム リクエストのライフ サイクル全体でトリガーされるフックを指します。 ThinkPHP6 では、config/app.php ファイルのミドルウェア構成項目を通じてグローバル フックを登録できます。
'middleware' => [
    // 注册全局钩子
    ppmiddlewareMyMiddleware::class,
    // ...
]
ログイン後にコピー
  1. ルーティング フックの登録
    ルーティング フックとは、特定のルートが一致した場合にのみトリガーされるフックを指します。 ThinkPHP6では、ルートにミドルウェアを指定することでルーティングフックを登録できます。
Route::rule('index', 'index/index')->middleware(ppmiddlewareMyMiddleware::class);
ログイン後にコピー

4. 概要
イベントとフックのメカニズムを通じて、プログラム内で発生するイベントをより柔軟に処理し、イベント発生後に対応する操作を実行できます。 ThinkPHP6 では、リスナーを登録することでイベントをリッスンし、イベントが発生したときに特定の操作を実行できます。同時に、より洗練されたプロセス制御を実現するために、対応するフックを実装するミドルウェアを登録することもできます。

このようにして、システムのさまざまな部分を分離して分離し、システムの拡張性と保守性を向上させることができます。

上記は、ThinkPHP6 イベントとフックの使用ガイドの関連内容です。ThinkPHP6 のイベントとフックのメカニズムを理解して適用するのに役立つことを願っています。

以上がThinkPHP6 イベントとフックの使用ガイド: トリガーとモニタリングの実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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