Documentation for Events updated

This commit is contained in:
SilverFire - Dmitry Naumenko
2016-11-26 12:19:45 +02:00
parent 092430df7d
commit f1f357bad3
4 changed files with 53 additions and 29 deletions

View File

@ -229,6 +229,8 @@ Il y a encore une manière plus abstraite d'utiliser les événements. Vous pouv
Par exemple, vous pouvez créer l'interface suivante : Par exemple, vous pouvez créer l'interface suivante :
```php ```php
namespace app\interfaces;
interface DanceEventInterface interface DanceEventInterface
{ {
const EVENT_DANCE = 'dance'; const EVENT_DANCE = 'dance';
@ -260,32 +262,36 @@ class Developer extends Component implements DanceEventInterface
Pour gérer l'évenement `EVENT_DANCE` déclenché par n'importe laquelle de ces classes, appelez [[yii\base\Event::on()|Event::on()]] et passez-lui le nom de l'interface comme premier argument : Pour gérer l'évenement `EVENT_DANCE` déclenché par n'importe laquelle de ces classes, appelez [[yii\base\Event::on()|Event::on()]] et passez-lui le nom de l'interface comme premier argument :
```php ```php
Event::on('DanceEventInterface', DanceEventInterface::EVENT_DANCE, function ($event) { Event::on('app\interfaces\DanceEventInterface', DanceEventInterface::EVENT_DANCE, function ($event) {
Yii::trace($event->sender->className . ' danse'); // enregistrer le message disant que le chien ou le développeur danse. Yii::trace(get_class($event->sender) . ' just danced'); // Will log that Dog or Developer danced
}) });
``` ```
Vous pouvez déclencher l'événement de ces classes : Vous pouvez déclencher l'événement de ces classes :
```php ```php
Event::trigger(DanceEventInterface::className(), DanceEventInterface::EVENT_DANCE); // trigger event for Dog class
Event::trigger(Dog::className(), DanceEventInterface::EVENT_DANCE);
// trigger event for Developer class
Event::trigger(Developer::className(), DanceEventInterface::EVENT_DANCE);
``` ```
Notez bien que vous ne pouvez pas déclencher l'événement de toutes les classes qui implémentent l'interface :, Notez bien que vous ne pouvez pas déclencher l'événement de toutes les classes qui implémentent l'interface :,
```php ```php
// NE FONCTIONNE PAS // NE FONCTIONNE PAS
Event::trigger('DanceEventInterface', DanceEventInterface::EVENT_DANCE); // error Event::trigger('app\interfaces\DanceEventInterface', DanceEventInterface::EVENT_DANCE);
``` ```
Pour détacher le gestionnaire d'événement, appelez [[yii\base\Event::off()|Event::off()]]. Par exemple : Pour détacher le gestionnaire d'événement, appelez [[yii\base\Event::off()|Event::off()]]. Par exemple :
```php ```php
// détache $handler // détache $handler
Event::off('DanceEventInterface', DanceEventInterface::EVENT_DANCE, $handler); Event::off('app\interfaces\DanceEventInterface', DanceEventInterface::EVENT_DANCE, $handler);
// détache tous les gestionnaires de DanceEventInterface::EVENT_DANCE // détache tous les gestionnaires de DanceEventInterface::EVENT_DANCE
Event::off('DanceEventInterface', DanceEventInterface::EVENT_DANCE); Event::off('app\interfaces\DanceEventInterface', DanceEventInterface::EVENT_DANCE);
``` ```

View File

@ -258,6 +258,8 @@ Event::off(Foo::className(), Foo::EVENT_HELLO);
例えば、次のようなインタフェイスを作ります。 例えば、次のようなインタフェイスを作ります。
```php ```php
namespace app\interfaces;
interface DanceEventInterface interface DanceEventInterface
{ {
const EVENT_DANCE = 'dance'; const EVENT_DANCE = 'dance';
@ -289,22 +291,26 @@ class Developer extends Component implements DanceEventInterface
これらのクラスのどれかによってトリガされた `EVENT_DANCE` を扱うためには、インターフェイスの名前を最初の引数にして [[yii\base\Event::on()|Event::on()]] を呼びます。 これらのクラスのどれかによってトリガされた `EVENT_DANCE` を扱うためには、インターフェイスの名前を最初の引数にして [[yii\base\Event::on()|Event::on()]] を呼びます。
```php ```php
Event::on('DanceEventInterface', DanceEventInterface::EVENT_DANCE, function ($event) { Event::on('app\interfaces\DanceEventInterface', DanceEventInterface::EVENT_DANCE, function ($event) {
Yii::trace($event->sender->className . ' が躍り上がって喜んだ。'); // 犬または開発者が躍り上がって喜んだことをログに記録。 Yii::trace(get_class($event->sender) . ' が躍り上がって喜んだ。'); // 犬または開発者が躍り上がって喜んだことをログに記録。
}) });
``` ```
これらのクラスのイベントをトリガすることも出来ます。 これらのクラスのイベントをトリガすることも出来ます。
```php ```php
Event::trigger(DanceEventInterface::className(), DanceEventInterface::EVENT_DANCE); // trigger event for Dog class
Event::trigger(Dog::className(), DanceEventInterface::EVENT_DANCE);
// trigger event for Developer class
Event::trigger(Developer::className(), DanceEventInterface::EVENT_DANCE);
``` ```
ただし、このインタフェイスを実装する全クラスのイベントをトリガすることは出来ない、ということに注意して下さい。 ただし、このインタフェイスを実装する全クラスのイベントをトリガすることは出来ない、ということに注意して下さい。
```php ```php
// これは動かない // これは動かない
Event::trigger('DanceEventInterface', DanceEventInterface::EVENT_DANCE); // エラー Event::trigger('app\interfaces\DanceEventInterface', DanceEventInterface::EVENT_DANCE);
``` ```
イベントハンドラをデタッチするためには、[[yii\base\Event::off()|Event::off()]] を呼びます。 イベントハンドラをデタッチするためには、[[yii\base\Event::off()|Event::off()]] を呼びます。
@ -312,10 +318,10 @@ Event::trigger('DanceEventInterface', DanceEventInterface::EVENT_DANCE); // エ
```php ```php
// $handler をデタッチ // $handler をデタッチ
Event::off('DanceEventInterface', DanceEventInterface::EVENT_DANCE, $handler); Event::off('app\interfaces\DanceEventInterface', DanceEventInterface::EVENT_DANCE, $handler);
// DanceEventInterface::EVENT_DANCE の全てのハンドラをデタッチ // DanceEventInterface::EVENT_DANCE の全てのハンドラをデタッチ
Event::off('DanceEventInterface', DanceEventInterface::EVENT_DANCE); Event::off('app\interfaces\DanceEventInterface', DanceEventInterface::EVENT_DANCE);
``` ```

View File

@ -231,6 +231,8 @@ Event::off(Foo::className(), Foo::EVENT_HELLO);
Например, создадим следующий интерфейс: Например, создадим следующий интерфейс:
```php ```php
namespace app\interfaces;
interface DanceEventInterface interface DanceEventInterface
{ {
const EVENT_DANCE = 'dance'; const EVENT_DANCE = 'dance';
@ -263,32 +265,36 @@ class Developer extends Component implements DanceEventInterface
вызовите [[yii\base\Event::on()|Event:on()]], передав ему в качестве первого параметра имя интерфейса. вызовите [[yii\base\Event::on()|Event:on()]], передав ему в качестве первого параметра имя интерфейса.
```php ```php
Event::on('DanceEventInterface', DanceEventInterface::EVENT_DANCE, function ($event) { Event::on('app\interfaces\DanceEventInterface', DanceEventInterface::EVENT_DANCE, function ($event) {
Yii::trace($event->sender->className . ' just danced'); // Оставит запись в журнале о том, что кто-то танцевал Yii::trace(get_class($event->sender) . ' just danced'); // Оставит запись в журнале о том, что кто-то танцевал
}); });
``` ```
Вы можете также инициализировать эти события: Вы можете также инициализировать эти события:
```php ```php
Event::trigger(DanceEventInterface::className(), DanceEventInterface::EVENT_DANCE); // trigger event for Dog class
Event::trigger(Dog::className(), DanceEventInterface::EVENT_DANCE);
// trigger event for Developer class
Event::trigger(Developer::className(), DanceEventInterface::EVENT_DANCE);
``` ```
Однако, невозможно инициализировать событие во всех классах, которые реализуют интерфейс: Однако, невозможно инициализировать событие во всех классах, которые реализуют интерфейс:
```php ```php
// НЕ БУДЕТ РАБОТАТЬ // НЕ БУДЕТ РАБОТАТЬ
Event::trigger('DanceEventInterface', DanceEventInterface::EVENT_DANCE); // ошибка Event::trigger('app\interfaces\DanceEventInterface', DanceEventInterface::EVENT_DANCE);
``` ```
Отсоединить обработчик события можно с помощью метода [[yii\base\Event::off()|Event::off()]]. Например: Отсоединить обработчик события можно с помощью метода [[yii\base\Event::off()|Event::off()]]. Например:
```php ```php
// отсоединяет $handler // отсоединяет $handler
Event::off('DanceEventInterface', DanceEventInterface::EVENT_DANCE, $handler); Event::off('app\interfaces\DanceEventInterface', DanceEventInterface::EVENT_DANCE, $handler);
// отсоединяются все обработчики DanceEventInterface::EVENT_DANCE // отсоединяются все обработчики DanceEventInterface::EVENT_DANCE
Event::off('DanceEventInterface', DanceEventInterface::EVENT_DANCE); Event::off('app\interfaces\DanceEventInterface', DanceEventInterface::EVENT_DANCE);
``` ```
Глобальные события <span id="global-events"></span> Глобальные события <span id="global-events"></span>

View File

@ -261,6 +261,8 @@ implement it in classes, where you need it.
For example, we can create the following interface: For example, we can create the following interface:
```php ```php
namespace app\interfaces;
interface DanceEventInterface interface DanceEventInterface
{ {
const EVENT_DANCE = 'dance'; const EVENT_DANCE = 'dance';
@ -290,35 +292,39 @@ class Developer extends Component implements DanceEventInterface
``` ```
To handle the `EVENT_DANCE`, triggered by any of these classes, call [[yii\base\Event::on()|Event::on()]] and To handle the `EVENT_DANCE`, triggered by any of these classes, call [[yii\base\Event::on()|Event::on()]] and
pass the interface name as the first argument: pass the interface class name as the first argument:
```php ```php
Event::on('DanceEventInterface', DanceEventInterface::EVENT_DANCE, function ($event) { Event::on('app\interfaces\DanceEventInterface', DanceEventInterface::EVENT_DANCE, function ($event) {
Yii::trace($event->sender->className . ' just danced'); // Will log that Dog or Developer danced Yii::trace(get_class($event->sender) . ' just danced'); // Will log that Dog or Developer danced
}) });
``` ```
You can trigger the event of those classes: You can trigger the event of those classes:
```php ```php
Event::trigger(DanceEventInterface::className(), DanceEventInterface::EVENT_DANCE); // trigger event for Dog class
Event::trigger(Dog::className(), DanceEventInterface::EVENT_DANCE);
// trigger event for Developer class
Event::trigger(Developer::className(), DanceEventInterface::EVENT_DANCE);
``` ```
But please notice, that you can not trigger all the classes, that implement the interface: But please notice, that you can not trigger all the classes, that implement the interface:
```php ```php
// DOES NOT WORK // DOES NOT WORK. Classes that implement this interface will NOT be triggered.
Event::trigger('DanceEventInterface', DanceEventInterface::EVENT_DANCE); // error Event::trigger('app\interfaces\DanceEventInterface', DanceEventInterface::EVENT_DANCE);
``` ```
To detach event handler, call [[yii\base\Event::off()|Event::off()]]. For example: To detach event handler, call [[yii\base\Event::off()|Event::off()]]. For example:
```php ```php
// detaches $handler // detaches $handler
Event::off('DanceEventInterface', DanceEventInterface::EVENT_DANCE, $handler); Event::off('app\interfaces\DanceEventInterface', DanceEventInterface::EVENT_DANCE, $handler);
// detaches all handlers of DanceEventInterface::EVENT_DANCE // detaches all handlers of DanceEventInterface::EVENT_DANCE
Event::off('DanceEventInterface', DanceEventInterface::EVENT_DANCE); Event::off('app\interfaces\DanceEventInterface', DanceEventInterface::EVENT_DANCE);
``` ```