Множественное Подключение обработчиков к Событию

Предварительное обсуждение найденных ошибок перед отправкой их авторам фреймворка, а также внесение новых предложений.
Ответить
Аватара пользователя
mihail_dev
Сообщения: 243
Зарегистрирован: 2013.07.17, 00:51
Откуда: Молдова
Контактная информация:

Множественное Подключение обработчиков к Событию

Сообщение mihail_dev »

задался вопросом как можно добавить несколько обработчиков к событию через конфиг файл.
на данный момент можно добавить только один обработчик

Код: Выделить всё

...
        'someComponentOrModule' => [
            'class' => 'someClassName',
            'on someEvent' => 'doSome',           
        ],
...
основываясь на функции on (public function on($name, $handler, $data = null))
предлагаю добавить следующую возможность добавления обработчиков

Код: Выделить всё

...
        'someComponentOrModule' => [
            'class' => 'someClassName',
            'on' =>[
                     ['eventName', 'eventHandler', 'eventData'],
                     ['eventName', 'eventHandler', 'eventData'],
                     ['eventName', 'eventHandler', 'eventData'],
            ],           
        ],
...
доработка класса yii\base\Component

1 вариант
добавить функцию setOn

Код: Выделить всё

public function setOn($value){
        foreach($value as $event){
            call_user_func_array([$this,'on'], $event);
        }        
    }
2 вариант
добавить в обработчик __set($name, $value)

Код: Выделить всё

elseif ($name === 'on') {
            foreach($value as $event){
                  call_user_func_array([$this,'on'], $event);
            }   
            return;
        }
Изображение
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: Множественное Подключение обработчиков к Событию

Сообщение maleks »

А сейчас кстати ради интереса, так же должно работать?:

Код: Выделить всё

        'someComponentOrModule' => [
            'class' => 'someClassName',
            'on someEvent' => 'doSome',           
            'on  someEvent' => 'doSome2',    
            'on   someEvent' => 'doSome3',                  
        ], 
Аватара пользователя
mihail_dev
Сообщения: 243
Зарегистрирован: 2013.07.17, 00:51
Откуда: Молдова
Контактная информация:

Re: Множественное Подключение обработчиков к Событию

Сообщение mihail_dev »

нет не будет!

if (strncmp($name, 'on ', 3) === 0) {
// on event: attach event handler
$this->on(trim(substr($name, 3)), $value);
return;
Изображение
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: Множественное Подключение обработчиков к Событию

Сообщение maleks »

mihail_dev писал(а):нет не будет!
да работает оно. По коду это видно. Вот рабочий пример :

Код: Выделить всё

$comp = new \yii\base\Component(
  [
       'on some' => function($event){print '__XX__';},
       'on  some' => function($event){print '__YY__';},        
       'on   some' => function($event){print '__ZZ__';},                                    
  ]
);
$comp->trigger('some');
Выводит:
__XX____YY____ZZ__
Аватара пользователя
mihail_dev
Сообщения: 243
Зарегистрирован: 2013.07.17, 00:51
Откуда: Молдова
Контактная информация:

Re: Множественное Подключение обработчиков к Событию

Сообщение mihail_dev »

сорри не заметил trim
но всё же как то не красиво но главное что работает
Изображение
lancedevnull
Сообщения: 1268
Зарегистрирован: 2013.07.17, 17:37

Re: Множественное Подключение обработчиков к Событию

Сообщение lancedevnull »

такая же беда и в Yii1, я расширял и делал возможность добавлять массив, как указано ТС...
Ответить