fix waSMS Есть решение

1

Вы добавляюте хук в своем системном классе waSMS, экземпляр которого может создаваться в различных приложениях. И если экземпляр класса waSMS создается в приложении shop, а подписываемся мы на хук в этом классе в приложении "myappication" то webasyst вызывает подписчиков только из приожения shop , а нас в "myappication" не вызывают.


Решение: 

вместо 
wa()->event('sms_send.before', $params, array('to', 'text', 'from', 'result', 'adapter'));

рабочий код

foreach (array_keys(wa()->getApps()) as $appId) {
wa($appId)->event('sms_send.before', $params, array('to', 'text', 'from', 'result', 'adapter'));
}

7 комментариев

  • +1

    это ожидаемое поведение. Но у myapplication есть возможность подписаться на события другого приложения

    • 0

      откуда подписчик знает в каком приложении может быть создано и отправлено SMS? Подписчик не обязан знать какие приложения работают в системе, он подписывается на событие, а задача системы вызвать подписчиков при генерации события на которое они подписаны.  И не важно в каком месте генерируется событие

      • +2
        Алексей Алексей 1 июня 2021 13:59 #

        Вы можете использовать wildcard хуки и подписаться на все приложения сразу, либо на выбранные.

        • 0

          Спасибо за подсказку. Сработало

          'handlers' => [
          '*' => [
          [
          'event_app_id' => '*',
          'event' => 'sms_send.before',
          'class' => ' myapplicationOrderstatusPlugin',
          'method' => 'checkSMS'
          ],
          ],
          ],
        • 0
          Аналогичным образом подписчики имеют дело с одним или несколькими классами сообщений, абстрагируясь от конкретных издателей.
          подписчиков не должны интересовать издатели, а нам предлагают подписываться на приложения с издателями. Подписчик подписывается на событие
          • +1

            Навскидку не могу придумать ситуации как это может мешать. Академическая теория стройна, не спорю. Но как это проецируется на практику? Именно на практику, а не на теоретические измышления. Вижу только один вариант: кто-то пишет псевдоприложение, вместо того чтобы сделать его плагином к требуемому приложению.

            • 0

              Это не теоретические измышления, а спецификация (шаблон проектирования) которой должны следовать разработчики чтобы не возникало коллизий. Мы выполнили требование - подписались на событие. Как разработчики системы - обеспечте вызов подписантов на событие.

              Много не требуется, тем более способ решения проблемы уже предложен.

              Добавить комментарий

              Чтобы добавить комментарий, зарегистрируйтесь или войдите