イベントの概要
イベントを使用すると、特定の時点で事前に設定されたコードの実行をトリガーできます。イベントはコードを分離する方法であるだけでなく、ビジネス プロセスを設計するためのパターンでもあります。最新のソフトウェアでは、イベントがいたるところにあります。たとえば、Weibo を投稿するとイベントがトリガーされ、あなたをフォローしている人があなたの新しいコンテンツを閲覧するようになります。イベントにはいくつかの要素があります:
これはどのようなイベントですか?ソフトウェア システムでは、新しい Weibo の公開もイベントであり、Weibo の削除もイベントです。
その出来事を引き起こしたのは誰ですか?あなたが Weibo に投稿する内容が、あなたが引き起こすイベントです。
このイベントの監視責任者は誰ですか?あるいは、この出来事が起こったかどうかは誰にも分かりません。ユーザー登録を処理するサーバー上のモジュールは、新しい Weibo イベントを受信しません。
その事件にどう対処しますか?新しいWeiboを公開するイベントについては、あなたをフォローしている他のユーザーに通知するためです。
イベント関連データとは何ですか?新しい Weibo イベントをリリースするには、含まれるデータには少なくとも新しい Weibo の内容、時間などが含まれている必要があります。
事例紹介: 逃げる猫がいるマウスを呼び出すとすぐに
この例を実装するには、frontend フォルダー内の event フォルダー に
event フォルダー を作成します。 event フォルダー には 2 つのクラス ファイルがあり、そのうちの 1 つは です。 Cat クラスと 1 つの
クラス
<?php namespace frontend\event; /** * 猫类 * Class: \frontend\event\Cat * * 为了让猫具有事件能力 * 所以要继承 \yii\base\Component * >>> \yii\base\Component 对 \yii\base\Event 的 on 方法进行重写 * >>> \yii\base\Event 适合类级绑定 * >>> \yii\base\Component 适合对象级绑定 */ class Cat extends \yii\base\Component { /** * 猫发出叫声 */ public function shout() { echo '猫:miao miao miao <br />'; // 猫叫了之后 触发猫的 miao 事件 $this->trigger('miao'); } }
Mouse.php
<?php namespace frontend\event; /** * 老鼠类 * Class: \frontend\event\Mouse */ class Mouse { public function run() { echo '老鼠:有猫来了,赶紧跑啊~~<br />'; } }
EventController.php
<?php namespace frontend\controllers; use frontend\event\Cat; use frontend\event\Mouse; /** * Class: \frontend\controllers\Event */ class EventController extends \yii\web\Controller { public function actionTest() { $cat = new Cat(); $mouse = new Mouse(); // 需事先给猫绑定 miao 事件才可以触发此事件 // 猫一叫,就触发老鼠的 run 方法 $cat->on('miao', [$mouse, 'run']); // 猫发出叫声 $cat->shout(); } }ブラウザに http://yourdomain.com/?r=event/test
と入力し、呼び出して
猫:miao miao miao 老鼠:有猫来了,赶紧跑啊~~
を取得します猫の叫び方、ミャオイベントが発生し、ネズミが逃げ出す
ある日突然、犬がこの事件に加わり、猫が吠えている限り、犬は猫のところに行きます
犬のメンバーを追加 Dog.php
<?php namespace frontend\event; /** * Class \frontend\event\Dog */ class Dog extends \yii\base\Component { /** * 找猫 */ public function findCat() { echo '狗:wang wang wang, 猫在哪里??'; } }frontend/controllers/EventController.phpを変更
犬猫探しイベントを追加
... // 需事先给猫绑定 miao 事件才可以触发此事件 // 猫一叫,就触发老鼠的 run 方法 $cat->on('miao', [$mouse, 'run']); $cat->on('miao', [$dog, 'findCat']); // 添加狗找猫事件 // 让猫发出叫声 $cat->shout(); ...更新 http://yourdomain.com/?r=event/test
Get
猫:miao miao miao 老鼠:有猫来了,赶紧跑啊~~ 狗:wang wang wang, 猫在哪里??
frontend/controllers/EventController.phpを変更します
use frontend\event\Cat; use frontend\event\Mouse; use frontend\event\Dog; ... public function actionTest() { $cat = new Cat(); $mouse = new Mouse(); $dog = new Dog(); // 需事先给猫绑定 miao 事件才可以触发此事件 // 猫一叫,就触发老鼠的 run 方法 $cat->on('miao', [$mouse, 'run']); $cat->on('miao', [$dog, 'findCat']); // 并非直接删除 $cat->on('miao', [$dog, 'findCat']); // 而是通过 off 解除绑定 $cat->off('miao', [$dog, 'findCat']); // 让猫发出叫声 $cat->shout(); } ...
クラスレベルバインディングしかし問題があります、上記のイベントは
$catによって割り当てられたオブジェクトに対して、add
frontend/controllers/EventController.php の actionTest メソッドの最後にあります。miao イベントはトリガーされませんpublic function actionTest()
{
...
// 让猫发出叫声
$cat->shout(); // 会触发 miao 事件
(new Cat())->shout(); // 不会触发 miao 事件
}
理由:
イベントのバインドは $cat オブジェクトを通じて行われます
猫が鳴いている限りネズミは逃げますか? ? これには、
イベントバインディングの使用が必要です
クラスレベルのイベントバインディングには、yiibaseEventクラスの使用が必要です
frontend/controllers/EventController.phpを変更する
use frontend\event\Cat; use frontend\event\Mouse; use yii\base\Event; ... public function actionTest() { $cat = new Cat(); $mouse = new Mouse(); // 类级别的事件绑定 // 只要猫发出声音,不管是什么猫,都会触发老鼠的 run 方法 Event::on(Cat::className() ,'miao', [$mouse, 'run']); // 让猫发出叫声 $cat->shout(); // 会触发 miao 事件 (new Cat())->shout(); // 会触发 miao 事件 }
猫:miao miao miao 老鼠:有猫来了,赶紧跑啊~~ 猫:miao miao miao 老鼠:有猫来了,赶紧跑啊~~
を取得します
以上がYii2のEVENTイベントの例を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。