Рубрики
Uncategorized

Событие Yii 2.0

Автор оригинала: David Wong.

Концептуальное понимание: Когда происходит событие (триггер), запуск предустановленного (включенного) кода является способом развязки кода.

События подразделяются на три категории по уровню

1. Уровень экземпляра

Классы, которые связывают и запускают события, наследуют Компонент Он выполняется только в текущем примере и не относится к другим экземплярам класса или к другим классам или экземплярам.

Code example:

php

namespace common\components;


use yii\base\Component;

class EventTest extends Component
{
    const EVENT_SAY_HELLO = 'say_hello';
    
    public function sayHello($event)
    {
        echo $event->data;
        $event->handled = true;
    }
    
    public function sayWorld($event)
    {
        echo $event->data;
    }
}

1. Binding events:

$event = new EventTest();

$event->on(EventTest::EVENT_SAY_HELLO, [$event, 'sayHello'], 'Hello!');

$event->on(EventTest::EVENT_SAY_HELLO, [$event, 'sayWorld'], 'World!');

2. Release events:

$event->off(EventTest::EVENT_SAY_HELLO, [$event, 'sayHello']);

3. Trigger events:

$event->trigger( EventTest::EVENT_SAY_HELLO);

2. Класс

Классы, которые связывают и запускают события, наследуют События События уровня класса, запускаемые теми же событиями самого класса, экземпляры класса, классы-потомки и экземпляры класса-потомка, оказывающие большее влияние

Code example:

data;
    }
    
    public function sayWorld($event)
    {
        echo $event->data;
    }
}

1. Binding events:

$event = new EventTest();

$event->on('\common\components\EventTest', EventTest::EVENT_SAY_HELLO, [$event, 'sayHello'], 'Hello!');

$event->on('\common\components\EventTest', EventTest::EVENT_SAY_HELLO, [$event, 'sayWorld'], 'World!');

2. Release events:

$event->off('\common\components\EventTest', EventTest::EVENT_SAY_HELLO, [$event, 'sayWorld']);
        

3. Trigger events:

$event->trigger('\common\components\EventTest', EventTest::EVENT_SAY_HELLO);

Class level parameter has one more parameter than instance level: class name
Be careful:
If the handle is not passed, all handles under the event are released.
Adding $event - > handled = true to one of the handles also prevents subsequent handles from triggering, as in the code above.

3. Глобальный уровень

использовать Экземпляры приложения доступны глобально на протяжении всего жизненного цикла приложения для достижения этого глобального события. Глобальные события могут запускаться при необходимости, а также быть связанными или несвязанными при необходимости.

Code example:

1. Binding events:
$event = new EventTest();

Yii::$app->on('global_event', [$event, 'globalEvent'], 'global event');

2. Trigger events:
Yii::$app->trigger('global_event');

The global level is actually a special instance. [Note that the so-called global scope of action is only valid in the life cycle of the current request, not in the current session (simply, open the browser, access the server, until the browser closes, called a session)]

принцип

Уровень экземпляра через обслуживание Компонент Свойства класса $_events Массив, который извлекается из текущего экземпляра по [имени события] при запуске события дескриптор Данные, затем с помощью функций call_user_func триггер дескриптор

Уровень Класса За Счет Технического Обслуживания Событие Свойства класса $_events Массив, который запускает событие, получая текущий класс и родительский класс по [имени класса и имени события] дескриптор Данные, затем с помощью функций call_user_func триггер дескриптор

Компонент $_event Ниже приведены примеры структур данных

Array
(
    [say_hello] => Array
        (
            [0] => Array
                (
                    [0] => Array
                        (
                            [0] => common\components\EventTest Object
                                (
                                    [_events:yii\base\Component:private] => Array
 *RECURSION*
                                    [_eventWildcards:yii\base\Component:private] => Array
                                        (
                                        )

                                    [_behaviors:yii\base\Component:private] => Array
                                        (
                                        )

                                )

                            [1] => say_hello
                        )

                    [1] => Hello!
                )

        )

)

Резюме

Приведенное выше краткое изложение относится к глубокому пониманию Yii 2.0, на самом деле, я видел его раньше, но оно ограничивается только его просмотром. Я не запускал демонстрационную отладку и не проверял исходный код самостоятельно, а потом ошибочно подумал, что понял его. На самом деле, я ничего не помню за эти два дня. Так что теперь, ведя блог, чтобы углубить их понимание, этот блог на самом деле в основном посвящен использованию событий, конкретным принципам флэш-прошлого, если у небольшого партнера есть немного знаний, он может взглянуть на исходный код. [ yii\база\Компонент yii\база\Событие ] Ты видишь. Из-за ограниченного уровня, небольшие партнеры могут обмениваться и корректировать.

Оригинал: “https://developpaper.com/event-of-yii-2-0/”