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

Guanhui
リリース: 2020-05-08 10:29:06
転載
3953 人が閲覧しました

イベント

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 までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート