ホームページ  >  記事  >  PHPフレームワーク  >  ThinkPHP6 イベントと複数のアプリケーション

ThinkPHP6 イベントと複数のアプリケーション

Guanhui
Guanhui転載
2020-05-08 10:14:503891ブラウズ

イベント

1. イベントは、より詳細なビジネス シナリオをより正確に特定できる点を除いて、ミドルウェアに似ています。

2. イベントは次のように定義できます。イベント クラス、イベント リスニング クラス、イベント サブスクリプション クラス;

3. まず、テスト イベント クラス TestEvent.php を作成し、手動でテスト クラスを作成します;

public function __construct()
{
//注册监听器
Event::listen('TestListen', function ($param) {
echo '我是监听器,我被触发了!'.$param;
});
}
public function info()
{
echo '登录前准备!';
Event::trigger('TestListen', 'ok'); //触发监听器
event('TestListen'); //助手函数触发
}

4. また、あなたもリスニング クラスを使用してリスナーを設計し、コマンド ラインを使用してリスナーを作成できます。

php think make:listener TestListen
public function info()
{
echo '登录前准备!';
Event::listen('TestListen', TestListen::class); //这句可以定义到配置文件
Event::trigger('TestListen');
}

5. app/event.php で、listen はリスニング クラスをリッスンするように設定されています。設定方法は次のとおりです。

'listen' => [
'TestListen' => [\app\listener\TestListen::class]
],

6 . リスニング クラスがトリガーされると、自動的に handle() メソッドが実行され、リスニング関数が実装されます;

public function handle($event)
{
echo '我是监听类!'.$event;
}

7. システムには、システム トリガー機能も組み込まれています。条件が満たされる限り自動的にトリガーされるイベント。

ThinkPHP6 イベントと複数のアプリケーション

イベント説明パラメーター AppInit アプリケーション初期化タグ ビット なし HttpRun アプリケーション開始タグ ビット なし HttpEnd アプリケーション終了タグ ビット 現在応答オブジェクト インスタンス LogWrite ログ書き込みメソッド タグ ビット 現在書き込まれているログ情報 RouteLoaded ルート読み込み完了 なし

8. イベント リスニング クラスは、識別子にバインドされている限り、複数のリスニング クラスを同時に監視できます。

'TestListen' => [
\app\listener\TestListen::class,
\app\listener\TestOne::class,
\app\listener\TestTwo::class
]

9. 複数のモニタリングが必要な場合、リスニング クラスは十分な柔軟性がありません。また、多数のクラスが作成されるため、サブスクリプション クラスを使用できます;

10.サブスクリプション クラスは、on メソッド名を使用してイベントを内部メソッドとして監視します;

php think make:subscribe UserSub
class UserSub
{
public function onUserLogin(){
echo '处理登录后的监听!';
}
public function onUserLogout(){
echo '处理退出后的监听!';
}
}

11。次に、app/event.php に直接登録します;

'subscribe' => [
'UserSub' => \app\subscribe\UserSub::class,
],

12。 2 つのメソッドはそれぞれ 2 つのイベント メソッドをリッスンし、メソッド名を直接呼び出すだけです;

public function login(){
echo '登录成功!';
Event::trigger('UserLogin');
}
public function logout(){
echo '退出成功!';
Event::trigger('UserLogout');
}

13. イベント クラスの場合、これを使用する必要があるシナリオはほとんどありません。システムは多くの正確なソリューションを提供します;

php think make:event UserEvent
class UserEvent
{
public function __construct()
{
echo '我是事件类!';
}
}
Event::trigger(new UserEvent());

マルチアプリケーション モード

1. マルチアプリケーション モードは拡張機能であるため、追加のインストールが必要です;

composer require topthink/think-multi-app

2. インストール後、index と admin という 2 つのアプリケーション ディレクトリ フォルダーを作成します;

3. コントローラーとモデルを移動し、対応する名前空間を変更するだけです;

4. 追加します。 2 つのアプリケーション ディレクトリ フォルダー (index と admin) をビューに追加し、対応するフォルダーに移動します;

5. デフォルトのアプリケーションは Index であり、app.php で変更できます;

// 默认应用
'default_app' => 'index',

6. 管理ディレクトリをマッピングするなどのアプリケーション マッピングを行うことができ、管理者は放棄されます;

// 应用映射(自动多应用模式有效)
'app_map' => [
'think' => 'admin'
],

7. また、バックグラウンドでドメイン名バインディングを使用するなど、ドメイン名バインディングも行うことができます。直接アクセス;

// 域名绑定(自动多应用模式有效)
'domain_bind' => [
'news.abc.com' => 'admin',
'*' => 'index'
],

8. ルートの変更: ルートはアプリケーション ディレクトリに別途確立する必要があり、内部コーディングを変更する必要はありません;

推奨チュートリアル: "ThinkPHP チュートリアル"

以上がThinkPHP6 イベントと複数のアプリケーションの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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