Yii - घटनाएँ
आप उपयोग कर सकते हैं eventsकुछ निष्पादन बिंदुओं पर कस्टम कोड इंजेक्ट करने के लिए। आप किसी घटना के लिए कस्टम कोड संलग्न कर सकते हैं, और जब घटना को ट्रिगर किया जाता है, तो कोड निष्पादित हो जाता है। उदाहरण के लिए, एक लकड़हारा वस्तु एक ट्रिगर हो सकती हैuserRegisteredईवेंट जब कोई नया उपयोगकर्ता आपकी वेब साइट पर रजिस्टर करता है। यदि किसी वर्ग को घटनाओं को ट्रिगर करने की आवश्यकता है, तो आपको इसे yii \ base \ Component वर्ग से विस्तारित करना चाहिए।
एक ईवेंट हैंडलर एक PHP कॉलबैक है। आप निम्न कॉलबैक का उपयोग कर सकते हैं -
एक स्ट्रिंग के रूप में निर्दिष्ट एक वैश्विक PHP फ़ंक्शन।
एक अनाम फ़ंक्शन।
एक वर्ग के नाम की एक सरणी और एक स्ट्रिंग के रूप में एक विधि, उदाहरण के लिए, ['क्लासनेम', 'मेथडनाम']
एक वस्तु की एक सरणी और एक स्ट्रिंग के रूप में एक विधि, उदाहरण के लिए, [$ 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
});