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
});