Проблема с registerEventHandler?

Пишу свой модуль. Регистрирую обработчик события:

$eventManager = \Bitrix\Main\EventManager::getInstance();
        $eventManager->registerEventHandler(
            "iblock",
            "OnAfterIBlockElementUpdate",
             $this->MODULE_ID,
            '\foo_spammer\events\SpammerIBlockElementUpdateHandler',
            "run"
        );


В обработчике уже весь код убрал.
class SpammerIBlockElementUpdateHandler
{
    public function run(Bitrix\Main\Entity\Event $event)
    {
          return true;
    }
}

При попытке отредактировать элемент инфоблока - бесконечно висит.
Если убрать параметр (Bitrix\Main\Entity\Event $event) - все возвращается в норму. Но мне нужен этот параметр! Пробовал registerEventHandlerCompatible и соответсвенно в параметрах было (&$arFields) - все равно виснет.
  • Вопрос задан
  • 1587 просмотров
Решения вопроса 1
@srvr4vr Автор вопроса
Вызываемая функция должна быть статичной. Сделал так:

class SpammerIBlockElementUpdateHandler
{
    public static function runStatic(&$fields)
    {
        $self = new self();
        return $self->run($fields);
    }

    public  function run(&$arFields)
    { 
         //some code
    }
}

/*****************************/
$eventManager = \Bitrix\Main\EventManager::getInstance();
$eventManager->registerEventHandlerCompatible(
    "iblock",
    "OnAfterIBlockElementUpdate",
     $this->MODULE_ID,
     '\foo_spammer\events\SpammerIBlockElementUpdateHandler',
     "runStatic"
);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
gromdron
@gromdron
Работаю с Bitrix24
Вы используете старое свойство (новых у инфоблоков пока нет).
Соответственно нужно:

1) Выполнять registerEventHandlerCompatible
2) Использовать код из документации и ловить не Event, а ссылку на массив
public function run( &$arFields )
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы