イベント
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. システムには、システム トリガー機能も組み込まれています。条件が満たされる限り自動的にトリガーされるイベント。
イベント説明パラメーター 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 サイトの他の関連記事を参照してください。