Yii - เหตุการณ์

คุณสามารถใช้ได้ eventsเพื่อฉีดโค้ดที่กำหนดเองที่จุดดำเนินการบางจุด คุณสามารถแนบโค้ดที่กำหนดเองกับเหตุการณ์และเมื่อเหตุการณ์ถูกเรียกใช้โค้ดจะถูกเรียกใช้งาน ตัวอย่างเช่นวัตถุคนตัดไม้อาจทริกเกอร์ไฟล์userRegisteredเหตุการณ์เมื่อผู้ใช้ใหม่ลงทะเบียนบนเว็บไซต์ของคุณ หากคลาสต้องการทริกเกอร์เหตุการณ์คุณควรขยายจากคลาส yii \ base \ Component

ตัวจัดการเหตุการณ์คือการเรียกกลับ PHP คุณสามารถใช้การโทรกลับต่อไปนี้ -

  • ฟังก์ชัน PHP ส่วนกลางที่ระบุเป็นสตริง

  • ฟังก์ชันที่ไม่ระบุชื่อ

  • อาร์เรย์ของชื่อคลาสและเมธอดเป็นสตริงตัวอย่างเช่น ['ClassName', 'methodName']

  • อาร์เรย์ของออบเจ็กต์และเมธอดเป็นสตริงตัวอย่างเช่น [$ obj, 'methodName']

Step 1 - ในการแนบตัวจัดการกับเหตุการณ์คุณควรโทรไปที่ไฟล์ yii\base\Component::on() วิธี.

$obj = new Obj;
// this handler is a global function
$obj->on(Obj::EVENT_HELLO, 'function_name'); // this handler is an object method $obj->on(Obj::EVENT_HELLO, [$object, 'methodName']); // this handler is a static class method $obj->on(Obj::EVENT_HELLO, ['app\components\MyComponent', 'methodName']);
// this handler is an anonymous function

$obj->on(Obj::EVENT_HELLO, function ($event) {
   // event handling logic
});

คุณสามารถแนบตัวจัดการหนึ่งตัวขึ้นไปกับเหตุการณ์ได้ ตัวจัดการที่แนบมาจะถูกเรียกตามลำดับที่แนบมากับเหตุการณ์

Step 2 - หากต้องการหยุดการเรียกใช้ตัวจัดการคุณควรตั้งค่า yii\base\Event::$handled property ถึง true.

$obj->on(Obj::EVENT_HELLO, function ($event) { $event->handled = true;
});

Step 3 - หากต้องการแทรกตัวจัดการที่จุดเริ่มต้นของคิวคุณสามารถโทร yii\base\Component::on()ส่งผ่านเท็จสำหรับพารามิเตอร์ที่สี่

$obj->on(Obj::EVENT_HELLO, function ($event) {
   // ...
}, $data, false);

Step 4 - หากต้องการเรียกใช้เหตุการณ์ให้โทรไปที่ไฟล์ yii\base\Component::trigger() วิธี.

namespace app\components;
use yii\base\Component;
use yii\base\Event;
class Obj extends Component {
   const EVENT_HELLO = 'hello';
   public function triggerEvent() {
      $this->trigger(self::EVENT_HELLO);
   }
}

Step 5 - ในการแยกตัวจัดการออกจากเหตุการณ์คุณควรโทรไปที่ไฟล์ yii\base\Component::off() วิธี.

$obj = new Obj; // this handler is a global function $obj->off(Obj::EVENT_HELLO, 'function_name');
// this handler is an object method
$obj->off(Obj::EVENT_HELLO, [$object, 'methodName']);
// this handler is a static class method
$obj->off(Obj::EVENT_HELLO, ['app\components\MyComponent', 'methodName']); // this handler is an anonymous function $obj->off(Obj::EVENT_HELLO, function ($event) {
   // event handling logic
});