Задать вопрос
@venomphp

Как избежать рекурсию?

Есть такое событие
public static function addMailingInfoBlock($event) : EventResult
    {
        $context = Application::getInstance()->getContext();
        $request = $context->getRequest();
        $request->getQueryList()->toArray();

        $ob = new CIBlockElement;

        $id = intval($event->getParameter("id"));

        if($request['send_approve_channel'])
        {
            $PROP[$propsId] = $id;

            if (!empty($id))
            {
                $arFilterAdd = [
                    "IBLOCK_ID"      => $iblockID,
                    "PROPERTY_VALUES"=> $PROP,
                    "NAME"           => "Рассылка " .$id,
                    "ACTIVE"         => "Y",
                ];
                $ob->Add($arFilterAdd);

            }
        }
        return new EventResult();
    }

в модуле устанавливаю событие так,
EventManager::getInstance()->registerEventHandler('sender', '\Bitrix\Sender\Internals\Model\Letter::onAfterAdd',
            $this->MODULE_ID, '\WWW\Sender\Events\EventMailing', 'addMailingInfoBlock');


Событие срабатывает, но в коде я записываю данные в инфоблок, и при срабатывании события, добавляется 6 лишних элементов в инфоблоке, если убрать вывод return EventResult, то появляется ошибка, но запись создаётся корректная, в чём ошибка ?
  • Вопрос задан
  • 110 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 2
@Drayde
Если создаётся 6 элементов, значит 6 раз отработало событие. Если вы убираете return, то логично получаете фатал, потому, что указали типизацию ответа, и дальнейщие события не отрабатывают. Выясняйте, почему событие отрабатывает 6 раз и меняйте логику в обработчике.
Ответ написан
Комментировать
@venomphp Автор вопроса
в таблице b_module_to_module, задублировались события, необходимо было очистить
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы