Вы добавляюте хук в своем системном классе 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 комментариев
это ожидаемое поведение. Но у myapplication есть возможность подписаться на события другого приложения
откуда подписчик знает в каком приложении может быть создано и отправлено SMS? Подписчик не обязан знать какие приложения работают в системе, он подписывается на событие, а задача системы вызвать подписчиков при генерации события на которое они подписаны. И не важно в каком месте генерируется событие
Вы можете использовать wildcard хуки и подписаться на все приложения сразу, либо на выбранные.
Спасибо за подсказку. Сработало
Навскидку не могу придумать ситуации как это может мешать. Академическая теория стройна, не спорю. Но как это проецируется на практику? Именно на практику, а не на теоретические измышления. Вижу только один вариант: кто-то пишет псевдоприложение, вместо того чтобы сделать его плагином к требуемому приложению.
Это не теоретические измышления, а спецификация (шаблон проектирования) которой должны следовать разработчики чтобы не возникало коллизий. Мы выполнили требование - подписались на событие. Как разработчики системы - обеспечте вызов подписантов на событие.
Много не требуется, тем более способ решения проблемы уже предложен.