Yii - Eventos
Você pode usar eventspara injetar código personalizado em determinados pontos de execução. Você pode anexar código personalizado a um evento e, quando o evento for disparado, o código será executado. Por exemplo, um objeto logger pode acionar umuserRegisteredevento quando um novo usuário se registra em seu site. Se uma classe precisa acionar eventos, você deve estendê-la da classe yii \ base \ Component.
Um manipulador de eventos é um retorno de chamada PHP. Você pode usar os seguintes retornos de chamada -
Uma função PHP global especificada como uma string.
Uma função anônima.
Uma matriz de um nome de classe e um método como uma string, por exemplo, ['ClassName', 'methodName']
Uma matriz de um objeto e um método como uma string, por exemplo, [$ obj, 'methodName']
Step 1 - Para anexar um manipulador a um evento, você deve chamar o yii\base\Component::on() método.
$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
});
Você pode anexar um ou mais manipuladores a um evento. Os manipuladores anexados são chamados na ordem em que foram anexados ao evento.
Step 2 - Para interromper a invocação dos manipuladores, você deve definir o yii\base\Event::$handled property para true.
$obj->on(Obj::EVENT_HELLO, function ($event) { $event->handled = true;
});
Step 3 - Para inserir o manipulador no início da fila, você pode chamar yii\base\Component::on(), passando falso para o quarto parâmetro.
$obj->on(Obj::EVENT_HELLO, function ($event) {
// ...
}, $data, false);
Step 4 - Para acionar um evento, chame o yii\base\Component::trigger() método.
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 - Para desanexar um manipulador de um evento, você deve chamar o yii\base\Component::off() método.
$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
});