Yii - Etkinlikler
Kullanabilirsiniz eventsbelirli yürütme noktalarında özel kod enjekte etmek için. Bir olaya özel kod ekleyebilirsiniz ve olay tetiklendiğinde kod çalıştırılır. Örneğin, bir günlükçü nesnesi biruserRegisteredWeb sitenize yeni bir kullanıcı kaydolduğunda meydana gelen olay. Bir sınıfın olayları tetiklemesi gerekiyorsa, onu yii \ base \ Component sınıfından genişletmelisiniz.
Bir olay işleyici, bir PHP geri aramadır. Aşağıdaki geri aramaları kullanabilirsiniz -
Dize olarak belirtilen genel bir PHP işlevi.
Anonim bir işlev.
Bir sınıf adı dizisi ve dize olarak bir yöntem, örneğin, ['SınıfAdı', 'yöntemAdı']
Bir nesne dizisi ve dize olarak bir yöntem, örneğin, [$ obj, 'methodName']
Step 1 - Bir olaya bir işleyici eklemek için, yii\base\Component::on() yöntem.
$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
});
Bir olaya bir veya daha fazla işleyici ekleyebilirsiniz. Ekli işleyiciler, olaya eklendikleri sırayla çağrılır.
Step 2 - İşleyicilerin çağrılmasını durdurmak için, yii\base\Event::$handled property -e true.
$obj->on(Obj::EVENT_HELLO, function ($event) { $event->handled = true;
});
Step 3 - İşleyiciyi kuyruğun başlangıcına eklemek için, yii\base\Component::on(), dördüncü parametre için yanlış geçme.
$obj->on(Obj::EVENT_HELLO, function ($event) {
// ...
}, $data, false);
Step 4 - Bir olayı tetiklemek için yii\base\Component::trigger() yöntem.
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 - Bir işleyiciyi bir olaydan ayırmak için, yii\base\Component::off() yöntem.
$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
});