Предположим, у меня есть событие под названием XXX и два разных сложных подписчика, которые могут выглядеть так:
class SubscriberOneXXX extends EventSubscriber {
function actionWithPriority1() { ... }
function actionWithPriority2() { ... }
function actionWithPriority3() { ... }
}
И второй:
class SubscriberTwoXXX extends EventSubscriber {
function actionWithPriority1() { ... }
function actionWithPriority2() { ... }
function actionWithPriority3() { ... }
}
Можно предположить, что эти два подписчика представляют разные рабочие процессы параллельных процессов и независимы.
Как я могу остановить распространение события в SubscriberOneXXX и пропустить оставшиеся действия, но разрешить другим подписчикам обрабатывать событие?
Сделайте себе под-событие. SubscriberOne просто отправит подписку SubscriberOne. Ваши действия s1 three будут просто слушателями этого события, и если одно из них прекратит распространение, то да ладно. Повторите для вашего второго подписчика. Излишне говорить, что перед реализацией этой функции убедитесь, что она вам действительно нужна. Идея флага, вероятно, лучший подход.
Это будет сложная реализация, но семафоры должен решить вашу проблему, вот объяснение, также вы можете использовать компонент блокировки symfony






Я не уверен, что вы можете, цель распространения остановки - остановить событие, чтобы другие подписчики не запускались. Вы можете добавить в подписчика логический флаг, который вы можете изменить, когда захотите. И проверьте флаг перед выполнением вашей логики.